メモリマップドファイルは、どのくらいの大きさにすることができますか?
-
05-09-2019 - |
質問
何がメモリマップドファイルのサイズを制限しますか?私はそれが未割り当てアドレス空間の最大連続チャンクよりも大きくなると、十分な空きディスク領域が存在すべきであるということはできません知っています。しかし、他の制限があるのですか?
解決
あなたはあまりにも保守的だ:メモリマップドファイルは、アドレス空間よりも大きくすることができます。メモリマップドファイルのののビューはOSのメモリの制約によって制限され、それはあなたが一度に見ているファイルの一部だけですされています。 (そして、私は頭上からそうはさておき、技術的にはあなたが一度にファイルの不連続部分の複数のビューをマップすることができると思いますし、ページ長の制約、それはあなたがその見ているバイトの総数は。あなたがバイトでリミット見ることができる唯一のポーズです二つの別々の望む[1024から0]及びバイト[2 40 2 40 + 1024]。)
MS Windowsでは、のMapViewOfFile 機能。これは、効果的にオフセット64ビットファイルと32ビットの長さをとる。
他のヒント
これは私の経験をされています:
1つのセグメントにマップファイル全体をした場合、それはメモリの大きな連続ブロックを見つけることができないので、それは通常、周りに750メガバイトで実施タップ。あなたは小さなセグメントにそれを分割する場合は、100メガバイトごとを言って、あなたが実行されている他に何に応じて、1500メガバイト、1800メガバイトの周りに取得することができます。
あなたは / 3Gスイッチを使用する場合に、あなたはより多くを得ることができますまでの2700メガバイトが、OSのパフォーマンスに関する2ギガバイトが罰せされます。
私は、64ビットについてはよく分からない、私はそれを試したことがありませんが、私は、最大のファイルサイズにのみ、あなたが持っている物理メモリの量によって制限されていると推定ます。
他の制限があってはなりません。これらは十分ではありませんか? ; - )
Windowsでは:「ファイルビューのサイズが予約されていない仮想メモリの最大利用可能な連続ブロックに限定されているこれは、最大で2ギガバイトマイナスすでにプロセスによって予約仮想メモリがある。」
MDSN のから。
私はLINUX / OSXについてはよく分からない/任意の他、それはおそらく、また、アドレス空間に関連しています。
Linux上で FUSEするを使用すると、また、オンデマンドでのディスクに拡張メモリ内のファイルシステムを作ることができます。私は、メモリとしての資格がマッピングされていることはよく分からない、との区別が不鮮明の種類を取得します。
はい、メモリマップファイルには限界があります。最も衝撃的です。
私が代わりにバイトオフセットを使用してその一部を取っての一つの大きなnumpyのメモリマップドファイルを読み込むしようとした場合、メモリマップドファイルは、32ビットシステムでは2GBを超えることはできません。
memmapが作成またはファイルシステムで、現在のサイズを超えて拡張するファイルを原因とすると、、新パーツの内容は不定です。 POSIXファイルシステムセマンティクスを有するシステムでは、拡張部分はゼロバイトで充填される。
も、私の64ビット、32ギガバイトRAMシステム上で、私は次のエラーを取得する:
Overflow Error: memory mapped size must be positive
ビッグデータセットは本当にで動作するように痛みがあります。
Wikipediaのエントリ: http://en.wikipedia.org/wiki/Memory-mapped_fileする