1. ホーム
  2. language-agnostic

[解決済み] メモリマップドファイルの利点は何ですか?

2023-01-23 19:20:14

質問

私はあるプロジェクトのためにメモリ マップ ファイルについて調査しています。以前に使用したことのある人、または使用を断念した人、そしてその理由について、何かご意見をいただけないでしょうか。

特に、重要な順に、以下について懸念しています。

  • 並行処理
  • ランダムアクセス
  • パフォーマンス
  • 使いやすさ
  • 移植性

どのように解決するのですか?

従来のファイルを読み込む方法よりも、必要なデータのコピー量を減らせるというのが、本当のところメリットだと思います。

アプリケーションがメモリ マップされたファイル内のデータを使用できる場合、データをコピーせずに読み込むことができます。システム コール (たとえば Linux の pread()) を使用する場合、通常カーネルが自身のバッファからユーザー空間にデータをコピーします。この余分なコピーには時間がかかるだけでなく、データの余分なコピーにアクセスすることにより、CPU のキャッシュの有効性を低下させます。

データが実際にディスクから読み込まれなければならない場合 (物理 I/O のように)、OS はまだそれらを読み込む必要があり、ページフォルトはおそらくシステムコールよりもパフォーマンス的に優れていませんが、そうでない場合 (すなわち、すでに OS キャッシュにある場合)、パフォーマンスは理論上はるかに優れているはずです。

欠点は、メモリ マップされたファイルへの非同期インターフェイスがないことです。マップされていないページにアクセスしようとすると、ページフォルトが発生し、スレッドは I/O のために待機することになります。


メモリ マップされたファイルの明らかな欠点は、32 ビット OS 上で、簡単にアドレス空間を使い果たすことができることです。