平台独立内存映射的[文件] IO

问题描述 投票:16回答:1

我花了一些时间研究正在处理的应用程序的内存映射IO。我有一些非常大的文件(TB大小),并且我想将它们中的段映射到内存中以进行读取和写入,从而最大程度地利用OS级缓存。我正在编写的软件需要在Unix / Linux和Windows下工作……性能至关重要。

我发现了boost::iostreams::mapped_file_sourceboost::iostreams::mapped_file_sink,它们提供了我正在寻找的大多数功能。我想要但尚未找到的设施是:

  • 强制将写入的数据同步到磁盘(Unix上为msync(2); Windows上为FlushViewOfFile
  • 锁定文件以防止两个进程试图同时写入同一文件(或在仍在写入文件的同时读取文件。)
  • 在创建时控制文件的属性(Unix)

我可以使用"boost/iostreams/device/mapped_file.hpp"做这些事情吗?是否还有其他独立于平台的库更适合我的要求?我必须开发自己的跨平台库来获得这种灵活性吗?

c++ boost cross-platform shared-memory mmap
1个回答
3
投票

查看boost :: interprocess和boost :: interprocess :: file_mapping。他们拥有您需要的一切。

boost::interprocess

boost::interprocess::file_mapping

© www.soinside.com 2019 - 2024. All rights reserved.