2

大量の画像を処理するために使用されるため(〜50k x 50k x 1000 -> 2.5テラピクセル)、信じられないほど大量のメモリを消費する可能性のある画像処理ツールのセットがあります。可能な限りディスク上に保存し、可能な場合は個々のスライス (2.5 ギガピクセルまで) を処理していますが、うまくいかない場合もあります。

私ができるようにしたいのは、必要に応じてディスクに書き込むことができるメモリのチャンクを用意することです。これはスワップ領域の背後にある基本的な考え方ですが、ルート/管理者アクセスやセットアップの再起動は必要ありません。このスワップ領域は、プロセスと指定したメモリに固有のものです。

これを行う 1 つの方法は、メモリ マップト ファイルを使用することです。ただし、これにはいくつかの欠点があると思います。メモリ マップト ファイルが機能する可能性はありますが、これらの誤解を修正する必要があるだけかもしれません。メモリマッピングが実際にどのように機能するか教えてください (できれば Windows と Linux で)。

  1. 可能な場合、メモリ マップト ファイルはディスクに同期しようとしますか? RAM の目的で必要な場合を除き、絶対に同期しないでください (msync / FlushViewOfFile を呼び出すことはありません)。

  2. 最初にページ サイズのデータ​​のチャンクのみをメモリ マップ領域に書き込んだ場合、基になるファイルが読み取られることはありますか? Linux の場合: 基になるファイルは、目的のサイズに ftruncate-ing で作成されたスパース ファイルにすることができますか?

  3. Linux の場合: コピー オン ライトではないプライベートなメモリ マップを取得する方法はありますか?

  4. メモリ保護 (mprotect / VirtualProtect) を変更すると、データが同期されますか?

4

0 に答える 0