了解了一些关于这个主题的知识后,谁能告诉我,POSIX 共享内存(shm_open)和 POSIX 映射文件(mmap)之间的真正区别是什么?

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

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

谢谢。

有帮助吗?

解决方案

的区别并不总是很清楚。共享存储器可以经由存储器映射文件来实现。 这个一个优秀的写可以在这里找到(如施加到C / C ++编程)。

其他提示

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

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

基本上共享存储器是共享IPC.The区域的形式在的/ dev / Shm为创建其在存储器仅(RAM)创建,并因此不需要盘的操作,因此它是IPC.Although IPC的更快的方法可以使用磁盘文件,然后使用mmap过,但它会comparetively slow.Alternatively你可以随时使用MAP_ANONYMOUS使用mmap不与任何磁盘文件备份来完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top