【问题标题】:Write Only Memory Mapping in boost?在boost中只写内存映射?
【发布时间】:2014-06-22 15:52:15
【问题描述】:

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

也许我遗漏了一些东西,但只写映射不会比读/写映射快得多,因为操作系统不必从磁盘读取页面,只需将页面从内存刷新到磁盘?此外,它还具有完全非阻塞的好处(刷新和销毁除外)。

从 boost 切换到本机操作系统内存映射对我有好处吗?

【问题讨论】:

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


    【解决方案1】:

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

    当“映射”该文件的页面时,需要进行读取操作(因为操作系统可能能够判断该页面尚未实际存在于磁盘上),并且仅当(如果)这些页面是脏了需要写出来。

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

    【讨论】:

      【解决方案2】:

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

      至少,如果您想避免在内核领域(未实现)模拟对此类页面的所有访问而不仅仅是映射页面的高昂成本。

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

      boost API 是对特定于操作系统的接口的精简包装,将完全内联,因此可以由任何体面的编译器编译出来。

      【讨论】:

      • 我考虑操作系统 API 的原因是因为它允许只写映射。不过,我不确定这是否有任何实际区别。
      • 不确定整个页面增量与只写和读/写之间的区别有什么关系?
      • 您的问题是对文件进行只写映射是否会更快,这对于答案很重要。嗯.. 粒度会更好。
      • @Depuplicator:我还没关注?页面增量与它有什么关系?无论是只写还是读/写,操作系统都会在页面大小增量上工作?
      • 操作系统以页面粒度工作,以跟踪这些更改/提供内存。
      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多