POSIX共享内存 - 有多少内存副本

时间:2016-01-01 06:27:53

标签: c linux posix ipc shared-memory

情况:

如果处理过& b每个使用mmap()创建共享内存映射,使用相同的共享内存对象/shm-a作为备份文件。

我猜:

我原本以为只有1份内存,它会处理写入/读取。

但后来我觉得实际上有3份副本,对吗?每个进程都有一个由mmap()创建的副本,第三个副本是共享内存对象,用于在进程之间进行同步,但我不确定。

问题是:

  • 那么有多少份内存? 1 n + 1 (其中 n 是流程计数)
  • 如果 n + 1 ,这不会浪费内存吗?进程是否适合通过其fd直接读取/写入共享内存对象?

1 个答案:

答案 0 :(得分:4)

  

那么有多少份内存? 1或n + 1(其中n是过程计数)

只有一份共享内存。

相同的物理内存映射到不同的进程。但它可能会映射到不同的地址。

  

通过fd直接读取/写入共享内存对象的进程是否合适?

是的。也就是说,实际上是共享内存的目的。一个进程写入共享内存的内容可以由另一个进程读取。这是一种非常快速的IPC形式。但是你必须要小心你如何使用它。特别是,您需要担心并发访问,并在共享内存中共享指针。