2013-10-02 165 views
2

共享内存段(使用shm_open创建)和共享内存段(shmget)有什么不同?共享内存段vs共享内存段

他们有任何限制,不能像共享内存shmmax和shmall那样调整?

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

回答

-2

“shmget”是Linux专用的分配Linux内核中实现的共享内存的方法。

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

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

我认为这两种方法都可以被另一种替换。只是由于历史原因,为什么有两种不同的方法来创建共享内存。

+0

我不认为“shmget”是一个“特定于Linux”的方法。 “图书馆功能”非常模糊,无论术语的含义如何,它也适用于“shmget”。 – WiSaGaN

+0

显然它不是Linux特有的 - 在这一点上你是对的。术语“库函数”是指该函数没有在OS内核中实现,而是在用户空间中实现。对于Linux版本1.x,情况绝对如此。 –

1

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

注意我不得不使用shm_open的POPULATE选项来提高性能。