在boost中只写内存映射?

时间:2014-06-22 15:52:16

标签: c++ windows boost memory-mapped-files

为什么不提升进程间支持只写内存映射?

也许我错过了一些东西但是不会只写入映射比读/写映射要快得多,因为操作系统不必从磁盘中读取页面,只需清除从内存到磁盘的页面?它也可以完全不阻塞(除了冲洗和破坏)。

通过从boost切换到本机OS内存映射,我会受益吗?

2 个答案:

答案 0 :(得分:1)

实际上,如果你分配一个大小的新内存映射文件,比如20Gb,你将获得该大小的稀疏文件分配。

当“映射”该文件的页面时,需要进行读取操作(因为操作系统可能会告诉该页面在磁盘上尚未存在),并且仅当(如果)这些页面是他们需要写出来。

当然,这是依赖于实现的,我不认为POSIX(可以)保证这一点,但它不是IYAM的不合理行为,并且相当于只写映射。

答案 1 :(得分:0)

实际上,只写的memmap不会更快,因为操作系统只能跟踪变化/以整页粒度提供这些映射。

至少,如果你想避免在kernel-land(未实现)中模拟对这些页面的所有访问的过高成本,而不是仅仅映射页面。

不知何故,我怀疑直接使用OS API而不是通过Boost-API可以提供任何显着的加速:

boost API是OS特定接口上的一个瘦包装器,将完全内联,因此可以由任何体面的编译器编译。