c++ - boost 内存映射文件 : they go to disk instead of RAM 的问题

标签 c++ boost memory-mapped-files ramdisk

我想了解 Boost 内存映射文件的工作原理。下面的代码有效,它做了它应该做的,但问题是它生成的文件存储在磁盘上(在可执行文件的同一目录中)而不是内存。也许有一个标志可以设置在某个地方,但我找不到它......
提前感谢您提供任何信息!

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <boost/iostreams/device/mapped_file.hpp>
    using std::cout;
    using std::endl;

    int main(int argc, char** argv) {
     const int blockSize = 64;
     bool writer = false;

     if(argc > 1) {
      if(!strcmp(argv[1], "w"))
       writer = true;
     }

     boost::iostreams::mapped_file_params  params;
     params.path = "map.dat";
    // params.length = 1024;     // default: all the file
     params.new_file_size = blockSize;

     if(writer) {
      cout << "Writer" << endl;
      params.mode = std::ios_base::out;
     }
     else {
      cout << "Reader" << endl;
      params.mode = std::ios_base::in;
     }

        boost::iostreams::mapped_file  mf;
        mf.open(params);

     if(writer)
     {
      char *block = mf.data();
      strcpy(block, "Test data block...\0");
      cout << "Written: " << block << endl;
     }
     else
     {
      cout << "Reading: " << mf.const_data() << endl;
     }

     mf.close();

        return 0;
    }
/*
    Compiler options: -Wall -I$(PATH_BOOST_INCLUDE) -ggdb
    Linker options: -L$(PATH_BOOST_LIBS) -lboost_iostreams-mt -lboost_system-mt -lboost_filesystem-mt -DBOOST_FILESYSTEM_NO_DEPRECATED
*/

使用的编译器:gcc 4.2.1
boost 1.41.0
操作系统:MacOS X 10.6.2

最佳答案

内存映射将磁盘文件映射到内存中。磁盘上必须有一个文件才能发生!

编辑:从您的评论来看,您似乎想要使用共享内存 - 请参阅 http://www.boost.org/doc/libs/1_41_0/doc/html/interprocess/quick_guide.html

关于c++ - boost 内存映射文件 : they go to disk instead of RAM 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1936266/

相关文章:

c++ - 使用 boost 生成适当数量的 token

c++ - boost asio 服务器在关闭 boost::socket 的调用中挂起

memory-mapped-files - 对于太大而无法一次进行内存映射的文件,每次建议的字节数是多少?

java - 如何用Java处理大数据?

C++11 lambda 不通过引用获取 const 变量,为什么?

c++ - 如何转换 CString LPStr

c++ - C++ 中纯虚拟容器接口(interface)的迭代器

c++ - 不能(隐式地)从 char** 转换为 const char**?

c++ - Qt:如何让 MainWindow 访问其子窗口的数据

c# - HDD 高效连续数据写入