mmap()分配的内存是否可以持久保存在内存中? [关闭]

问题描述 投票:-4回答:1

我有一个文件(该文件将是只读的,但该文件的权限可能不是只读的),我可以通过mmap()(在C中)或[Go]中的syscall.Mmap()映射到内存。如果我有多个进程映射同一个文件(可能不是同一时间),该文件是否会在内存中的不同位置多次映射到内存中?有没有一种方法可以使映射的内存持久化,以便可以被多个进程使用?

P.S。我知道shmget()可以使一块持久的内存保留在内存中,以便可以在许多进程中重用。但是我也看到有人说它是旧的,mmap()是新的。我很困惑,至少在某些情况下mmap()是否可以完全取代shmget()。但是我认为mmap()可能无法取代shmget()

c go posix shared-memory mmap
1个回答
0
投票

任何理智的操作系统都只会将一个物理页面分配给文件的每个内容。可以很容易地检查是否这样做:产生一千个进程,每个进程将一个GB的只读文件映射到内存中。然后开始从所述映射进行随机读取。除非您有1 TB的RAM,否则如果操作系统为使用映射的每个进程分配单独的物理页,它将陷入停顿。幸运的是:不会。即使只有3 GB的RAM和较旧的操作系统(如32位Windows XP),一旦读取并缓存了文件的所有内容,它也能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.