一度にメモリマップするには大きすぎるファイルの場合、毎回推奨されるバイト数は何ですか?
-
06-07-2019 - |
質問
メモリマップを使用してファイルを開いています。ファイルは明らかに大きすぎて(32ビットPCで6GB)、前にマッピングできません。そのため、毎回その一部をマッピングし、次のマッピングでオフセットを調整することを考えています。
各マッピングに最適なバイト数はありますか、またはそのような数値を決定する方法はありますか?
ありがとう。
解決
最適なサイズはありません。 32ビットプロセスでは、合計で4 GBのアドレススペースしかありません。通常、ユーザーモードプロセスで使用できるのは2 GBだけです。この2 GBは、exeおよびDLLのコードとデータ、ヒープ割り当て、スレッドスタックなどによって断片化されます。これを考えると、おそらくファイルをメモリにマップするための1 GBを超える連続したスペースは見つかりません。
最適な数はアプリによって異なりますが、512 MBを超える32ビットプロセスへのマッピングが懸念されます。 512 MBに制限しても、アプリケーションによっては問題が発生する場合があります。あるいは、64ビットに移行できる場合、ファイルの複数ギガバイトをメモリにマッピングする問題はないはずです-アドレス空間が非常に大きいので、問題は発生しません。
VirtualQueryのようなAPIを使用して、最大の連続したスペースを見つけることができますが、大量のアドレススペースを削除するときに、実際にメモリ不足エラーが発生します。
編集:私の答えはWindows固有のものであることに気づきましたが、どのプラットフォームについて話し合っていなかったのでしょうか。他のプラットフォームでも、メモリマップファイルに対して同様の制限要因があると思われます。
他のヒント
ファイルをメモリマッピングする必要がありますか?
733Mhz PIIIで8GBのビデオファイルを編集しました(快適ではありませんが、実行可能です)。