2012-12-15 48 views
3

在以下代码:直接访问boost :: mapped_region数据?

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

data“阵列”实际上不作为昂贵分配创建或复制 - 它只是一个指向虚拟存储器空间的OS使用来表示在存储器中的文件的内容。所以这是一些簿记,但没有实际的重要工作。

当您第一次访问它时(即数据[0]),使用比C++流或C(f)读取效率更高的优化例程的第一个文件块中的OS页面。良好的操作系统还会预加载第二块后续块,然后静静地放弃旧的块,从而有效管理物理内存,同时速度超出预期。只要确保您的文件适合您的免费虚拟内存空间 - 通常只有32位代码中的1 GB文件存在问题。

因此,没有其他方式 - 想要或已知 - 访问内容。 (我打算使用标准I/O例程重新打开文件!)