2014-06-22 96 views
1

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

也许我错过了一些东西,但不会写只有映射显着快于读/写映射,因为操作系统不需要从磁盘读取页面,只需从内存中清除页面磁盘?它也有完全非阻塞的好处(除了冲洗和破坏)。

我会从升压切换到本机操作系统内存映射受益吗?

回答

1

事实上,如果你分配一个新的大小内存映射文件,比如说20Gb,你会得到一个稀疏的文件大小分配。

当在该文件的“映射”页面中,需要进行读取操作(因为操作系统可能能够判断该页面在物理上还没有存在于磁盘上),并且只有当(如果)这些页面被弄脏需要他们写出来。

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

0

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

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

不知怎的,我怀疑直接到OS API,而不是去通过升压-API可以提供任何显著速度起坐:

升压API是一个瘦包装在特定的操作系统界面和会完全内联,并由任何体面的编译器编译出来。

+0

我考虑OS API的原因是因为它允许只写映射。虽然,我不确定这是否有任何实际区别。 – ronag

+0

不确定整个页面增量必须与只写和读/写之间的区别? – ronag

+0

你的问题是询问是否只写一个文件的映射文件会更快,这对于答案很重要。嗯.. *粒度*会更好。 – Deduplicator