加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 增强内存映射文件的问题:它们转到磁盘而不是RAM

发布时间:2020-12-16 10:39:07 所属栏目:百科 来源:网络整理
导读:我试图了解Boost内存映射文件的工作原理.下面的代码可以工作,它可以完成它应该做的事情,但问题是它生成的文件存储在磁盘上(在可执行文件的同一目录中)而不是内存.也许有一个标志设置在某个地方,但我找不到它…… 在此先感谢您的任何信息! #include iostream
我试图了解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...");
      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
提升1.41.0
操作系统:MacOS X 10.6.2

解决方法

内存映射将磁盘文件映射到内存中.磁盘上必须有一个文件才能实现!

编辑:从您的评论中,听起来您想使用共享内存 – 请参阅http://www.boost.org/doc/libs/1_41_0/doc/html/interprocess/quick_guide.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读