POSIX shared memory - 有多少份内存

POSIX shared memory - How many copies of memory are there

情况:

如果进程 a 和 b 各自使用 mmap() 创建共享内存映射,使用相同的共享内存对象 /shm-a 作为备份文件。

我的猜测:

我本来以为内存只有1份,进程write/read上。

不过后来我觉得其实有3个副本吧?每个进程有1个副本,由mmap()创建,第3个副本是共享内存对象,用于进程间同步,但我不确定。

问题是:

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 形式。但是你必须小心使用它。特别是,您需要担心并发访问和共享内存中的共享指针。