【发布时间】:2014-09-12 13:23:39
【问题描述】:
这样做有什么好处:shm_open 跟着mmap?
为什么不创建一个常规文件,然后将 fd 传递给 mmap?
我看不出shm_open 的优势——这些只是参考,不是吗?
我读过全家的男人。在我看来,“秘密”在映射操作中——文件“类型”似乎毫无意义。
任何指针都会很好,尤其是性能帐户。
我的上下文是一个(循环可重写)缓冲区(比如 128MB),它将不断被写入一个进程,并不断被另一个进程转储。
例如:this open/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...);
当我在 /dev/shm fs 下使用常规 open 创建一个文件,并向其中转储 Gig 垃圾时,我的可用内存减少了 1G,而我的可用磁盘空间保持不变。
这两种方法有什么区别?
【问题讨论】:
-
试试吧。写入文件可能会慢一百倍。
标签: c linux buffer shared-memory mmap