如果我必须在两个进程之间移动适量的内存,我可以执行以下操作:
- 创建一个用于写入的文件
- ftruncate 到所需的大小
- mmap 并取消链接
- 根据需要使用
当另一个进程需要该数据时,它:
- 通过 unix 套接字连接到第一个进程
- 第一个进程通过 unix socket 消息发送文件的 fd
- 映射 fd
- 根据需要使用
这允许我们在没有任何副本的情况下在进程之间移动内存 - 但创建的文件必须在内存挂载的文件系统上,否则我们可能会遇到磁盘命中,这会降低性能。有没有办法在不使用文件系统的情况下做这样的事情?一个类似 malloc 的函数会返回一个 fd 和一个指针。
[编辑]拥有一个文件描述符还提供了一个由内核维护的引用计数机制。