在下面的代码中:
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
数组?
EDIT代码是指using namespace boost:interprocess;
答案 0 :(得分:0)
data
“数组”实际上并不是作为昂贵的分配或副本创建的 - 它只是指向操作系统用来表示内存中文件内容的虚拟内存空间的指针。所以这是一些簿记,但没有实际的重要工作。
当您第一次访问它时(即data [0]),使用优化例程的第一个文件块中的OS页面比C ++流或C(f)读取更有效。好OS'es也会预加载第二个&amp;后续的块并静静地丢弃旧的块,因此有效地管理物理内存,同时比你期望的更快。只需确保您的文件适合您的免费虚拟内存空间 - 通常只有32位代码中1 GB以上文件的问题。
所以不,没有其他方式 - 想要或已知 - 访问内容。 (我打算使用标准I / O例程重新打开文件!)