マニュアルから、私は mmap() がファイルを仮想アドレス空間にマップすることを知っているので、ファイルにランダムにアクセスできます。しかし、マップされたファイルがすぐにメモリにロードされるかどうかは不明です。カーネルはマップされたメモリをページごとに管理し、オンデマンドでロードされると思います。読み取りと書き込みを少しだけ行うと、ロードされるページはわずかです。それが正しいか?
6363 次
4 に答える
2
はい、mmap はマッピングを作成します。通常、メモリにマップしたものの内容全体を読み取るわけではありません。これを行いたい場合は、mlock/mlockall システム コールを使用して、カーネルにマッピングの内容を RAM に読み込ませることができます (該当する場合)。
于 2013-10-29T10:55:16.207 に答える
1
はい。要点は、すべてmmap
をメモリに丸呑みするよりも効率的にメモリを管理することです。
もちろん、特定の実装では、ファイル全体を一度に読み込む方が効率的であると判断する場合もありますが、それは を呼び出すプログラムに対して透過的である必要がありますmmap
。
于 2013-10-29T09:00:52.757 に答える
1
デフォルトでは、mmap() はマッピングを構成して返す (高速) だけです。
Linux(少なくとも)には、質問の内容を正確に実行するオプションMAP_POPULATE(「man mmap」を参照)があります。
于 2019-10-30T01:37:14.513 に答える