内存多次映射同一个文件?

时间:2014-06-11 21:26:40

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

要与磁盘同步,您需要使用msync。在大多数系统上,多个MAP_SHARED映射将为您提供一块内存,名义上由磁盘支持,在进程之间共享。我不确定这种行为是否已被指定,或仅仅是典型实施的幸福结果。

相关问题