【问题标题】:Memory Mapping the same file multiple times?多次内存映射同一个文件?
【发布时间】:2014-06-11 21:26:40
【问题描述】:

内存多次映射同一个文件的性能特点是什么?操作系统会在映射之间重用/缓存,还是会多次将文件读入内存的不同部分?

即如果我从两个不同的进程读取和写入内存映射文件,它会通过磁盘还是它们会在内存中通信?如果我从两个不同的进程交替线程读取内存映射文件,它们会从同一个内存中读取吗?

【问题讨论】:

  • 每个进程中的指针/地址都是相同的,它们都共享内存,因此内存映射也称为共享内存。

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


【解决方案1】:

您可以使用MAP_PRIVATE 来获取底层文件的私有写时复制映射。您可以使用MAP_SHARED 来查看底层文件。我不知道如果您同时在 MAP_PRIVATE 映射和 MAP_SHARED 映射中映射相同的区域会发生什么,但我怀疑写入任一映射会导致副本。

为了与磁盘同步,您想使用msync。在大多数系统上,多个MAP_SHARED 映射将为您提供一块内存,名义上由磁盘支持,在进程之间共享。我不确定这种行为是指定的还是仅仅是典型实现的一个快乐结果。

【讨论】:

    【解决方案2】:

    它将使用文件缓存,因此假设机器中有足够的 RAM,它应该缓存两个进程的写入。当然也假设读取和写入实际上命中了文件的同一区域......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2010-11-01
      • 2011-05-14
      相关资源
      最近更新 更多