1

通常はメインメモリに収まらない大量のデータを処理する必要があります。このデータにアクセスする方法は局所性が高いため、データの一部をメモリにキャッシュすることは良いオプションのように見えます。巨大な配列をmalloc()するだけで、オペレーティングシステムに、ページアウトするビットと保持するビットを認識させることは可能ですか?

4

2 に答える 2

6

データがファイルからのものであると仮定すると、そのファイルをメモリマッピングする方がよいでしょう。それ以外の場合は、配列を割り当ててから、ファイルから配列にデータをコピーすることになります。配列はページファイルにマップされるため、基本的には元のファイルをページファイルにコピーするだけです。また、「キャッシュ」(つまり、物理メモリ)を汚染するプロセスでは、現在アクティブな他のデータが削除される可能性がはるかに高くなります。次に、完了したら、(通常)配列から元のファイルにデータを書き戻します。これは(この場合)ページファイルから元のファイルにコピーすることを意味します。

代わりに、ファイルをメモリマッピングすると、アドレススペースが作成され、元のファイルに直接マップされます。これにより、元のファイルからページファイルにデータをコピーする(および完了したら元に戻す)ことや、元のファイルからページファイルに移動する途中でデータを物理メモリに一時的に移動することを回避できます。もちろん、最大のメリットは、実際にはまったく使用しない元のファイルのかなりの部分がある場合です(この場合、未使用のチャンクが少なくとも1ページであると仮定すると、それらは物理メモリにまったく読み込まれない可能性があります)サイズで)。

于 2010-09-20T23:17:16.870 に答える
0

データが大きなファイルにある場合は、mmapを使用してデータを読み取ることを検討してください。最近のコンピュータにはRAMがたくさんあるので、十分なスワップスペースが利用できない可能性があります。

于 2010-09-20T23:04:59.110 に答える