1

如果我必须在两个进程之间移动适量的内存,我可以执行以下操作:

  • 创建一个用于写入的文件
  • ftruncate 到所需的大小
  • mmap 并取消链接
  • 根据需要使用

当另一个进程需要该数据时,它:

  • 通过 unix 套接字连接到第一个进程
  • 第一个进程通过 unix socket 消息发送文件的 fd
  • 映射 fd
  • 根据需要使用

这允许我们在没有任何副本的情况下在进程之间移动内存 - 但创建的文件必须在内存挂载的文件系统上,否则我们可能会遇到磁盘命中,这会降低性能。有没有办法在不使用文件系统的情况下做这样的事情?一个类似 malloc 的函数会返回一个 fd 和一个指针。

[编辑]拥有一个文件描述符还提供了一个由内核维护的引用计数机制。

4

1 回答 1

4

System VPOSIX共享内存有什么问题(它们有些不同,但最终得到相同的结果)?对于任何这样的系统,您必须担心进程在访问内存时之间的协调,但对于内存映射文件也是如此。

于 2011-07-25T23:45:18.050 回答