共享内存对象(使用shm_open创建)和共享内存段(shmget)之间有什么区别?
他们是否有任何限制无法调整,如共享内存shmmax和shmall?
这两者之间是否存在任何性能差异,以及应该使用哪些IPC方案?
答案 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”是一个特殊的目录,以避免真正必须将共享内存写入磁盘。
我认为这两种方法都可以被另一种方法取代。只是由于历史原因,为什么有两种不同的方法来创建共享内存。