日期:2014-05-16  浏览次数:21044 次

linux下用mmap实现共享内存的时候open和shm_open有什么区别
open一个文件 和 shm_open一个文件,然后用mmap把它映射入内存,两者之间有什么区别。 我只知道shm_open打开的文件在 /dev/shm下面,其他没看出来,性能上有区别吗?

另外,我看到说 只有调用munmap 或 msync的时候才会把数据写入到磁盘,但我没有调用这两个函数之前让程序sleep,然后用cat打开文件也能看到数据,就是说数据已经写入磁盘了。 那么这样性能不是很差吗。

------解决方案--------------------
shm_open主要打开一个共享内存用户进程间交换大量数据
mmap可以用于交换数据,也可以映射文件,很方便的。

linux操作系统写文件没你想象那么简单,有缓存机制的,你cat文件的内容不一定是来自硬盘。
而mmap除了msync,munmap也会在适当时机写入硬盘。
------解决方案--------------------
shm_open内存共享主要功能还是作为一种便捷的ipc通信机制
------解决方案--------------------
不设置share就不会写盘。