我花了一些時間研究我正在處理的應用程序的內存映射IO。我有一些非常大的(TB級)文件,我想將它們的片段映射到內存中,以便讀寫,最大限度地利用操作系統級緩存。我正在編寫的軟件需要在Unix/Linux和Windows下工作......性能至關重要。平臺無關的內存映射[文件] IO
我發現了boost::iostreams::mapped_file_source
和boost::iostreams::mapped_file_sink
,它提供了我正在尋找的大部分設施。我想,但沒有發現這些設施有:
- 強制寫入數據的磁盤同步(
msync
(2)在Unix;FlushViewOfFile
在Windows上) - 鎖定文件,以防止兩個進程在創建時試圖寫在同一時間同一文件(或閱讀,而該文件仍然被寫入..)
- 文件的控制屬性(UNIX)
可以用"boost/iostreams/device/mapped_file.hpp"
這些東西我做的?是否有其他平臺獨立的庫可以更好地滿足我的要求?我必須開發自己的跨平臺庫來獲得這種靈活性嗎?
順便說一句, 「存儲器映射的I/O」 通常指的是讀取使用地址(又名存儲器映射的)I/O端口(例如使用指針),而不是使用專用處理器I/O說明。 –
公平點。我正在談論內存映射文件I/O [http://en.wikipedia.org/wiki/Memory-mapped_file] - 並且已經編輯了標題來反映這一點。 – aSteve