私は特に Linux について質問していますが、Unix 全般 (POSIX など) に当てはまる回答であれば、さらに良いでしょう。
Linux は、ファイルシステムのメタデータ (および場合によっては他のもの) をキャッシュするために、空きメモリ (つまり、プロセスにまだ割り当てられていないメモリ) を使用します。プロセスが追加のメモリを要求すると、これらのキャッシュは縮小されてスペースが確保されます。
質問: アプリケーションがキャッシュとしてのみ機能するメモリを割り当てる方法はありますか? つまり、使用可能なメモリが少なくなり、他のプロセスのメモリ割り当てが処理されなくなった場合に、カーネルが何らかの方法でこのメモリ領域の制御を取得できることを認識し、割り当てが行われます。
答え1
おそらくmadvise(2)
の目的はMADV_FREE
、ページを再利用可能としてマークしますが、必ずしもすぐに削除するわけではなく、データを読み戻すことができるようにすることです。すべてのゼロが返された場合 (ページごと)、ページがなくなったことがわかります。