在了解了这个主题之后,有人能说出来,POSIX共享内存(shm_open)和POSIX映射文件(mmap)之间的真正区别是什么?
两者似乎都使用/ dev / tmpfs子系统,而不是旧的IPC机制。
在共享内存中使用mmap文件有什么好处吗?
感谢。
答案 0 :(得分:15)
区别并不总是很清楚。共享内存可以通过内存映射文件实现。 An excellent write on this can be found here (as applied to C/C++ programming).
答案 1 :(得分:2)
我的理解是共享内存建立在映射文件之上,但This Page似乎表明使用内存映射文件作为共享内存的条件是有条件的。
mmap()函数的使用受QSHRMEMCTL系统值的限制。当此系统值为0时,mmap()函数可能无法创建具有PROT_WRITE功能的共享映射。实质上,这可以防止创建可能改变正在映射的流文件内容的内存映射。如果flags参数指示MAP_SHARED,则prot参数指定PROT_WRITE且QSHRMEMCTL系统值为0,则mmap()函数将失败并且错误数量为EACCES结果。
答案 2 :(得分:0)
基本上共享内存是IPC的一种形式。共享区域是在/ dev / shm中创建的,它只在内存中创建(RAM),它不需要磁盘操作,因此它是一种更快的IPC方法。尽管IPC可以使用磁盘文件,然后使用mmap,但它会比较慢。或者你可以使用MAP_ANONYMOUS与mmap,它不备份任何磁盘文件。