做 shm_open
然后跟上一个 mmap
有什么优势呢?
为什么不创建一个普通文件,然后将该 fd
传递给 mmap
?
我看不出 shm_open
的优势 - 这些只是引用,不是吗?
我已经阅读了整个手册。在我看来,“秘密”就在于 mmap 操作 - 文件“类型”似乎毫无意义。
任何指针都是好的,特别是涉及性能方面的。
我的背景是一个(循环可覆盖的)缓冲区(例如128MB),将由一个进程不断写入,并由另一个进程不断卸载。
举个例子:这个 打开/mmap 方法有什么问题。
编辑
准确地说,以下哪种方法更好:
fd = open("/dev/shm/myshm.file", O_CREAT|O_RDWR, S_IRUSR | S_IWUSR);
mem = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
对战
fd = shm_open("/myshm.file", O_RDWR|O_CREATE, S_IRUSR | S_IWUSR);
mem = mmap(...same as before...);
当我使用常规的
open
在/dev/shm
文件系统下创建一个文件,并向其中倾倒了1G的垃圾时,我的可用内存减少了1G,而可用磁盘空间保持不变。这两种方法有什么区别?