次の問題があります。
mmap
withを介して大量のメモリ (複数 GiB) を割り当てMAP_ANONYMOUS
ます。そのチャンクには、時々ゼロにする必要がある大きなハッシュ マップが保持されます。各ラウンドでマッピング全体が使用されるわけではないため (すべてのページに障害が発生するmemset
わけではありません)、時間がかかりすぎるため、お勧めできません。
これを迅速に行うための最良の戦略は何ですか?
意思
madvise(ptr, length, MADV_DONTNEED);
その後のアクセスで新しい空のページが提供されることを保証しますか?
Linux のman madvise
ページから:
この呼び出しは、アプリケーションのセマンティクスには影響しませんが ( MADV_DONTNEEDの場合を除く)、パフォーマンスに影響を与える可能性があります。カーネルはアドバイスを自由に無視できます。
...
MADV_DONTNEED
この範囲内のページへの後続のアクセスは成功しますが、基礎となるマップされたファイル (mmap(2) を参照) からメモリの内容を再ロードするか、基礎となるファイルのないマッピングのゼロ フィル オンデマンド ページのいずれかになります。
...
現在の Linux 実装 (2.4.0) では、このシステム コールをアドバイスというよりもコマンドと見なしています ...
それともmunmap
、リージョンを新たに再マッピングする必要がありますか?
Linux で動作する必要があり、理想的には OS X でも同じ動作をします。