【问题标题】:Access boost::mapped_region data directly?直接访问 boost::mapped_region 数据?
【发布时间】:2012-12-03 10:55:57
【问题描述】:

在下面的代码中:

file_mapping fm(FilePath, read_only); 
mapped_region region(fm,read_only);
char* const data = static_cast<char *>(region.get_address());
for(size_t n=0; n<region.get_size(); ++n){
    cout << data[n];
}

有没有什么方法可以从映射的内存中访问字符而不需要创建data 数组?

编辑代码参考using namespace boost:interprocess;

【问题讨论】:

    标签: c++ arrays memory boost


    【解决方案1】:

    data“数组”实际上并不是作为昂贵的分配或复制创建的——它只是一个指向操作系统用来表示内存中文件内容的虚拟内存空间的指针。所以这只是记账,但没有真正重要的工作。

    当您第一次访问它时(即 data[0]),第一个文件块中的 OS 页面使用优化的例程比 C++ 流或 C 的 (f) 读取更有效。好的操作系统还会预加载第二个和后续块并静默丢弃旧的使用块,因此有效地管理物理内存,同时比您预期的要快。只需确保您的文件适合您的可用虚拟内存空间 - 通常只有 1+ GB 的 32 位代码文件才有问题。

    所以不,没有其他方式(想要或知道)访问内容。 (我不赞成使用标准 I/O 例程重新打开文件!)

    【讨论】:

      猜你喜欢
      • 2014-02-13
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多