質問: メモリ圧迫下でのmallocに対する匿名mmapの利点 私はいくつかの大規模な配列処理コードを実行しています(Linuxを実行しているPentium上)。配列のサイズは、プロセスがスワップするのに十分な大きさです。これまでのところ、私は私の読書を続けて、連続して書くことを試みているので、おそらく働いています。しかし、すぐに大規模な配列を扱う必要があります。このシナリオでは、匿名のmmappedブロックへの切り替えは役に立ちますか? もしそうなら、理由を説明してください。 私の浅い理解では、mmapはtmpfsパーティションからマウントされたメモリマップされたファイルを実装しています。私が理解したいのは、mmapが標準のmallocよりも優れていることです(それが本当に良いと仮定しているので、そうであるかどうかわかりません)。 注:64ビット以上のRAMを取得することはお勧めしません。残念ながら、それは選択肢ではありません。
回答: あなたの `malloc()`割り当てを裏付けるメモリは、 `mmap()`で作成されたプライベートな匿名マッピングを返すメモリと同じようにカーネルによって処理されます。実際、大きな割り当てのために、 `malloc()`はとにかくそれをバックするために `mmap()`で匿名マッピングを作成するので、 `> mmap()`してください。 あなたのワーキングセットが物理メモリサイズを超えている場合は、swapを使用する必要があり、 `mmap()`または `malloc()`で作成された匿名マッピングを使用するかどうか、/code>はそれを変更しません。あなたが行うことができる最も良いことは、あなたのアルゴリズムを試してリファクタリングすることです。それによって良い参照の地域、スワップがあなたを傷つける程度を減らします。 `madvise()`システムコールを使用して、メモリの使用に関するヒントをカーネルに与えることもできます。