共享内存段与共享内存对象

时间:2013-10-02 16:26:13

标签: linux kernel ipc shared-memory

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-2)

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

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

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

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