2

我想使用 mmap() 在进程之间共享内存。mmap() 可以应用于常规文件或 POSIX 共享内存文件 (shm_open)。但是有什么区别呢?区别肯定不在于是否访问磁盘:

  • 经常和最近访问的常规文件存在于文件系统缓存/缓冲区中,因此它们的内容已经在内存中。
  • 即使将 mmap() 与 shm_open() 一起使用,当系统处于高内存压力下时,该内存区域也可能被换出。
4

1 回答 1

2

一个区别是,尽管共享内存可能会写入磁盘,但它永远不会永久写入磁盘。如果您创建一个普通文件,那么它会在重新启动后持续存在。如果您创建共享内存对象,则不会。在这方面,它的行为非常像一个临时文件。

另一个区别是“未指定名称是否出现在文件系统中,并且对于将路径名作为参数的其他函数可见”。因此,尽管共享内存对象具有类似文件的路径,但它实际上不需要出现在文件系统中。

实际上,这两个区别都与文件系统的解耦有关。文件和共享内存对象都是可以读取和写入的字节包,但文件的不同之处在于它们保存在文件系统中。

于 2012-11-04T13:17:45.983 回答