perlの仮想記憶の対応は?

[上に] [前に] [次に]
J.Naka [E-Mail] 1999/09/15(水) 16:33:01
Win95です。

sysread(IN,$buf,$size);

上の$sizeに指定できる上限は何を基準&理由にしてあるのでしょうか。
0xFFFFFFFF = 4G とか当然エラーです。もっと小さくするとOut of memoryとかなります。
これは、PerlがOSのスワップファイルサイズの上限をチェックしてのエラーでしょうか?それとも、Perl内部の定数でしょうか?

B-Cus 1999/09/15(水) 16:40:26
> 0xFFFFFFFF = 4G とか当然エラーです。
-1だから。
> Out of memoryとかなります。
OSの制限です。

J.Naka 1999/09/15(水) 16:56:54
[[解決]]
解答ありがとさんです。

>OSの制限です。
なるる、OSの制限をPerlの制限って事ですね。

ちと独り言(^^;
 -1とかの論理的上限の指定があった場合、それは、
OS制限内でファイルサイズ全体の指定と等価、くらいに変換してくれてもよさそうな感じもする。

ふじ 1999/09/16(木) 00:10:22
>OS制限内でファイルサイズ全体の指定と等価、くらいに変換してくれてもよさそうな感じもする。
移植性無くなるでしょ。

B-Cus 1999/09/16(木) 00:42:33
こっちの言いたいこと伝わってるのかな。

別に -1 が論理的上限を意味するなんてことはない。単にこっちの環境で
やったら
 Negative length at sysread line 5.
となったから、sysread の中では $size が符号付き32ビット整数で
扱われているので、0xffffffff==-1 になってるんだろう、ってこと。

Win環境持ってないので、Win95でどうなるかは知らない。

でも、各アプリが仮想記憶のことなんて考えるはずがないから
(それはOSの仕事だから)、Out of memory は OS の制限だろうってこと。

# perlのソース持ってきて眺めることくらいはした?
# わかるわからないは別として。

[上に] [前に] [次に]