メモリ マップト ファイルのサイズを制限するものは何ですか? 割り当てられていないアドレス空間の最大連続チャンクよりも大きくすることはできず、十分な空きディスク容量が必要であることはわかっています。しかし、他の制限はありますか?
6 に答える
保守的すぎます。メモリ マップト ファイルは、アドレス空間よりも大きくなる可能性があります。メモリ マップト ファイルの表示は OS メモリの制約によって制限されますが、それは一度に見ているファイルの一部にすぎません。(そして、技術的には、ファイルの不連続な部分の複数のビューを一度にマップできると思います。そのため、オーバーヘッドとページ長の制約は別として、制限を課すのは、見ているバイトの合計数だけです。バイトを見ることができます[0 から 1024] およびバイト [2 40から 2 40 + 1024] を 2 つの別個のビューで表示します。)
MS Windows では、MapViewOfFile関数を見てください。事実上、64 ビットのファイル オフセットと 32 ビットの長さを取ります。
これは、Win32 でメモリ マップト ファイルを使用したときの私の経験です。
ファイル全体を 1 つのセグメントにマップすると、通常は約 750 MB でタップアウトします。これは、より大きな連続したメモリ ブロックを見つけることができないためです。たとえば、それぞれ 100MB の小さなセグメントに分割すると、他に何が実行されているかに応じて、約 1500MB ~ 1800MB を取得できます。
/3g スイッチを使用すると、2GB を超えて最大約 2700MB を取得できますが、OS のパフォーマンスが低下します。
64ビットについてはよくわかりません。試したことはありませんが、最大ファイルサイズは物理メモリの量によってのみ制限されると思います。
Windows の場合: 「ファイル ビューのサイズは、予約されていない仮想メモリの使用可能な最大連続ブロックに制限されます。これは、最大で 2 GB から、プロセスによって既に予約されている仮想メモリを差し引いたものです。」
MDSNから。
LINUX/OSX/Whatever Else についてはわかりませんが、おそらくアドレス空間にも関連しています。
他の制限があってはなりません。十分ではありませんか?;-)