直接访问提升::mapped_region数据

Access boost::mapped_region data directly?

本文关键字:mapped region 数据 访问      更新时间:2023-10-16

在下面的代码中:

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;

data"

array"实际上并不是作为昂贵的分配或副本创建的 - 它只是指向操作系统用于表示内存中文件内容的虚拟内存空间的指针。 所以这是一些簿记,但没有实际的重要工作。

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

所以不,没有其他方法 - 想要或已知 - 访问内容。 (我不喜欢使用标准 I/O 例程重新打开文件!