多次映射同一个文件

Memory Mapping the same file multiple times?

本文关键字:文件 同一个 映射      更新时间:2023-10-16

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

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

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

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

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