私が取り組んでいるアプリケーションのメモリマップされたIOを調べるのに時間を費やしました。私はいくつかの非常に大きな(TBスケール)ファイルを持っており、読み書きのためにそれらからセグメントをメモリにマップして、OSレベルのキャッシュを最大限に活用したいと考えています。私が書いているソフトウェアは、Unix/LinuxとWindowsの下で動作する必要があります...パフォーマンスは重要です。プラットフォームに依存しないメモリマップ[ファイル] IO
私が探している施設のほとんどを提供するboost::iostreams::mapped_file_source
とboost::iostreams::mapped_file_sink
が見つかりました。私が好きな、しかし、発見していない施設は以下のとおりです。
- ディスクに書き込まれたデータの同期を強制(
msync
(2)Unixでは、Windows上FlushViewOfFile
)二つのプロセスを防ぐために、ファイルの - ロック同時に同じファイルを書き込もうとする(または読み取りファイルはまだ書かれている間...)
- ファイルの属性を制御する作成時に(UNIX)
私は"boost/iostreams/device/mapped_file.hpp"
を使用してこれらのことを行うことができます?私の要件に適した他のプラットフォームに依存しないライブラリはありますか?この柔軟性を得るには、私自身のクロスプラットフォームライブラリを開発する必要がありますか?
ところで、 "I/Oメモリマップ" は、一般のI /(ポインタを使用してなど)のアドレス(メモリマップ別名)を使用してではなく、特殊なプロセッサを使用してI/Oポートを読み出すことをいいますO命令。 –
フェアポイント。私はメモリマップされたファイルI/O [http://en.wikipedia.org/wiki/Memory-mapped_file]について話しており、これを反映するタイトルを編集しました。 – aSteve