共享内存段 vs 共享内存对象

4

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

它们是否有任何不能像shmmax和shmall一样进行调整的限制?

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

2个回答

1
我发现在测试中,通过shm_open访问的内存比通过shmget访问的内存更快。除此之外,在功能方面它们非常相似。两者之间必须存在一些微妙的缓存或TLB差异,但我不熟悉底层细节。
请注意,我必须使用shm_open的POPULATE选项才能获得这种性能提升。

-2
"shmget"是Linux特定的方法,用于在Linux内核中实现共享内存分配。
"shm_open"是一个库函数,通过使用mmap映射文件来模拟共享内存。由于文件使用“共享”标志进行映射,因此内存在进程之间共享。
在Linux 1.x中,“/dev/shm”目录(包含文件)只是一个常规目录,因此使用“shm_open”的共享内存实际上是磁盘文件。在Linux 3.x中,“/dev/shm”是一个特殊目录,以避免共享内存必须真正写入磁盘。
我认为这两种方法都可以互相替换。只是因为历史原因,才有了两种不同的创建共享内存的方法。

我认为"shmget"不是一个"Linux特定"的方法。"库函数"相当模糊,而且无论术语意味着什么,它也适用于"shmget"。 - WiSaGaN
显然,这不是特定于Linux的 - 在这一点上你是正确的。术语“库函数”意味着该函数未在操作系统内核中实现,而是在用户空间中实现。对于Linux版本1.x来说,这绝对是事实。 - Martin Rosenau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接