27

对这个主题有所了解后,任何人都可以说出 POSIX 共享内存 (shm_open) 和 POSIX 映射文件 (mmap) 之间的真正区别是什么?

两者似乎都使用 /dev/tmpfs 子系统,而不是旧的 IPC 机制。

那么使用 mmap 文件而不是共享内存有什么优势吗?

谢谢。

4

3 回答 3

18

区别并不总是很清楚。共享内存可以通过内存映射文件来实现。 可以在此处找到一篇出色的文章(适用于 C/C++ 编程)。

于 2010-02-14T21:22:09.003 回答
2

我的理解是共享内存是建立在映射文件之上的,但是这个页面似乎表明使用内存映射文件作为共享内存的能力是有条件的。

mmap() 函数的使用受 QSHRMEMCTL 系统值的限制。当此系统值为 0 时,mmap() 函数可能不会创建具有 PROT_WRITE 功能的共享映射。从本质上讲,这可以防止创建可能改变正在映射的流文件内容的内存映射。如果 flags 参数指示 MAP_SHARED,prot 参数指定 PROT_WRITE 并且 QSHRMEMCTL 系统值为 0,则 mmap() 函数将失败并产生 EACCES 错误数。

于 2010-02-14T21:28:25.817 回答
0

Basically shared memory is an form of IPC.The shared region is created in /dev/shm which is created in memory only(RAM) and it requires no disk operations, hence it is a faster method of IPC.Although IPC can be done using disk file and then using mmap too, but it would be comparetively slow.Alternatively you can always use MAP_ANONYMOUS with mmap which does not back up with any disk file.

于 2011-10-02T17:41:37.667 回答