情况:
如果进程 a 和 b 各自使用 mmap()
创建共享内存映射,使用相同的共享内存对象 /shm-a
作为备份文件。
我的猜测:
我本来以为只有1份内存,处理write/read on。
但是后来我觉得其实有3个副本对不对?每个进程都有1个副本,由mmap()
创建,第3个副本是共享内存对象,用于进程间同步,但我不确定。
问题是:
- 那么内存有多少份? 1 或 n+1(其中 n 是进程数)
- 如果是n+1,这不会是一种内存浪费吗?进程直接通过它的
fd
读/写共享内存对象是否合适?
最佳答案
Then how many copy of memory there are? 1 or n+1 (where n is process count)
共享内存只有一份。
相同的物理内存被映射到不同的进程中。但它可能会映射到不同地址。
And is it proper for process to read/write to the shared memory object via its fd directly?
是的。这实际上就是共享内存的目的。一个进程写入共享内存的内容可以被另一个进程读取。这是一种非常快速的 IPC 形式。但是你必须小心使用它。特别是,您需要担心并发访问和共享内存中的共享指针。
关于c - POSIX 共享内存 - 有多少内存副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554060/