【发布时间】:2014-06-22 15:52:15
【问题描述】:
为什么 boost 进程间不支持只写内存映射?
也许我遗漏了一些东西,但只写映射不会比读/写映射快得多,因为操作系统不必从磁盘读取页面,只需将页面从内存刷新到磁盘?此外,它还具有完全非阻塞的好处(刷新和销毁除外)。
从 boost 切换到本机操作系统内存映射对我有好处吗?
【问题讨论】:
标签: c++ windows boost memory-mapped-files
为什么 boost 进程间不支持只写内存映射?
也许我遗漏了一些东西,但只写映射不会比读/写映射快得多,因为操作系统不必从磁盘读取页面,只需将页面从内存刷新到磁盘?此外,它还具有完全非阻塞的好处(刷新和销毁除外)。
从 boost 切换到本机操作系统内存映射对我有好处吗?
【问题讨论】:
标签: c++ windows boost memory-mapped-files
事实上,如果您分配一个大小为 20Gb 的新内存映射文件,您将获得该大小的稀疏文件分配。
当“映射”该文件的页面时,需要进行读取操作(因为操作系统可能能够判断该页面尚未实际存在于磁盘上),并且仅当(如果)这些页面是脏了需要写出来。
当然,这取决于实现,我不认为 POSIX(可以)保证这一点,但这不是不合理的行为 IYAM,并且相当于只写映射。
【讨论】:
实际上,只写 memmap 不会更快,因为操作系统只能跟踪更改/以整页粒度提供这些映射。
至少,如果您想避免在内核领域(未实现)模拟对此类页面的所有访问而不仅仅是映射页面的高昂成本。
不知何故,我怀疑直接使用 OS API 而不是通过 Boost-API 可以提供任何显着的加速:
boost API 是对特定于操作系统的接口的精简包装,将完全内联,因此可以由任何体面的编译器编译出来。
【讨论】: