【发布时间】:2014-02-26 16:22:53
【问题描述】:
我正在开发一个应该在多个进程之间共享数据的程序。我使用 mmap() 来映射共享数据。但问题是 mmap() 返回的指针不是很“灵活”(与 malloc() 返回的指针相比)。缓冲区(共享数据)需要动态调整大小。所以现在我所做的仍然是操作堆中的共享数据(malloc,realloc..),然后将其复制到由 mmap() 返回的缓冲区。其他进程需要将共享数据从 mmap() 缓冲区加载到堆中。
这会带来一些性能损失。我想知道是否有一种方法可以直接将堆中的数据分配给映射文件而不进行复制?
【问题讨论】:
-
该区域是否需要在其他进程查看时增长?
-
不,它没有。它只需要在写作过程中是动态的。一旦写入过程完成写入,这个区域就可以是不可变的。
-
然后将数据塞入
mmaped 区域,就完成了。在任何情况下,除非您有无可辩驳的测量结果告诉您此数据复制是您程序中的严重瓶颈,否则请不要担心。你的时间很宝贵,电脑很便宜。还要记住premature optimization is the root of all evil。
标签: c linux multiprocessing