我想了解如何提升内存映射文件的工作。下面的代码工作,它做什么,这是应该做的,但问题是它生成的文件存储在磁盘(可执行文件的同一目录),而不是记忆。也许有一个标志设置的地方,但我无法找到它...点击 预先感谢任何信息!

    #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结果 升压1.41.0结果 OS:MacOS X的10.6.2

有帮助吗?

解决方案

内存映射磁盘文件映射到内存中。必须有磁盘上的文件要做到这一点!

编辑:从您的意见,这听起来像你要使用共享内存 - 看的 http://www.boost.org/doc/libs/1_41_0/doc/html/interprocess/quick_guide.html

其他提示

内存映射文件是专门关于使文件的内容,以显示为程序中的一个的存储器区域。他们是不是“内存”创建一个特殊的文件。 Boost的概念是直接从Unix和类似设施mmap系统调用在大多数其他操作系统的可用性拍摄。它被设计成解决此能力的通用包装器。

如果你正在尝试做的是创建两个进程共享内存区域,内存映射文件可以为你做的,但在具有磁盘上的文件,它反映了存储器的内容的成本。在Linux中,这仍然是相当有效的,因为文件的内容只会缓存在内存中,并对应于文件内容,程序的内存页面将是完全相同的物理页面为正在使用的缓存。

如果你想要的只是一个ramdisk ...

大多数现代操作系统使用所不需要通过流程盘高速缓冲存储器。有一个RAMDISK没有真正的需要。在Linux下有一个文件系统类型,称为tmpfs,你可以使用不具有靴之间保持的文件系统。它的文件一般会在内存中,但它们可以被交换出去,就像任何其他种类的内存就可以了。

是,系统V共享存储器中存在,它有一个绝对深不可测的设计。我不会与一个10英尺的极触摸SYS V进程间通信原语。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top