3

共享内存对象(使用 shm_open 创建)和共享内存段(shmget)有什么区别?

它们是否有任何无法调整的限制,例如共享内存 shmmax 和 shmall?

这两者之间是否存在任何性能差异,应该在哪些 IPC 场景中使用它们?

4

2 回答 2

1

我在测试中发现通过访问shm_open的内存比通过访问的内存要快shmget。除此之外,它们在功能方面非常相似。两者之间肯定存在一些细微的缓存或 TLB 差异,但我不熟悉引擎盖下的细节。

注意我必须使用 POPULATE 选项shm_open来提高性能。

于 2014-09-30T21:20:37.933 回答
-2

“shmget”是一种在 Linux 内核中实现的分配共享内存的特定于 Linux 的方法。

“shm_open”是一个库函数,它通过使用 mmap 映射文件来模拟共享内存。因为文件是使用“共享”标志映射的,所以内存在进程之间共享。

在 Linux 1.x 中,“/dev/shm”目录(包含文件)只是一个常规目录,因此使用“shm_open”的共享内存实际上是磁盘文件。在 Linux 3.x 中,“/dev/shm”是一个特殊的目录,以避免共享内存真的必须写入磁盘。

我认为这两种方法都可以用另一种方法代替。只是因为历史原因,才有两种不同的方法来创建共享内存。

于 2013-10-03T08:41:12.760 回答