Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 独立于平台的内存映射[文件]IO_C++_Boost_Cross Platform_Shared Memory_Mmap - Fatal编程技术网

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

C++ 独立于平台的内存映射[文件]IO,c++,boost,cross-platform,shared-memory,mmap,C++,Boost,Cross Platform,Shared Memory,Mmap,我花了一些时间研究我正在开发的应用程序的内存映射IO。我有一些非常大(TB规模)的文件,我想将它们中的段映射到内存中,用于读写,最大限度地利用操作系统级缓存。我正在编写的软件需要在Unix/Linux和Windows下工作。。。性能至关重要 我发现了boost::iostreams::mapped_file_source和boost::iostreams::mapped_file_sink,它们提供了我正在寻找的大多数工具。我想要但尚未找到的设施有: 强制将写入数据同步到磁盘(msync(2)

我花了一些时间研究我正在开发的应用程序的内存映射IO。我有一些非常大(TB规模)的文件,我想将它们中的段映射到内存中,用于读写,最大限度地利用操作系统级缓存。我正在编写的软件需要在Unix/Linux和Windows下工作。。。性能至关重要

我发现了
boost::iostreams::mapped_file_source
boost::iostreams::mapped_file_sink
,它们提供了我正在寻找的大多数工具。我想要但尚未找到的设施有:

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

我可以使用
“boost/iostreams/device/mapped_file.hpp”
做这些事情吗?是否有其他与平台无关的库更适合我的要求?我必须开发自己的跨平台库才能获得这种灵活性吗?

看看boost::进程间和boost::进程间::文件映射。他们有你需要的一切


BTW,“内存映射I/O”通常指使用地址(也称为内存映射)读取I/O端口(如使用指针),而不是使用特殊的处理器I/O指令。公平点。我说的是内存映射文件I/O[]-并编辑了标题以反映这一点。你可能是对的。。。但是,使用boost::interprocess,我看不出如何(直接地)在操作系统页面大小的块中建立对数据的访问…@aSteve,此库支持内存映射文件,请参阅:是的,boost::interprocess支持(托管的)内存映射文件。。。此上下文中的“managed”表示malloc()可以“仿佛”访问文件中的空间。显然对进程间通信很有价值,但我需要一种更基本的“非托管”IO方法。我需要一个函数,返回指向包含任意文件偏移量的映射块的指针。boost::iostreams::mapped_file_*接口在这里非常理想。。。尽管它们在同步/锁定方面没有提供同样的灵活性。我已经阅读了进程间文档-我看不出如何将进程间用于“原始”映射IO。更新。。。我现在意识到你的意思是我应该使用boost::interprocess::file_mapping,这个类非常有意义。@aSteve,对不起,我以为你一旦意识到它,就会浏览这个库了!:)看来你现在有了!;)