mmap()常规文件和mmap()POSIX共享内存文件有什么区别?

时间:2012-11-04 13:02:39

标签: shared-memory mmap

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

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

1 个答案:

答案 0 :(得分:1)

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

另一个区别是“It is unspecified whether the name appears in the file system and is visible to other functions that take pathnames as arguments”。因此,虽然共享内存对象具有类似文件的路径,但它实际上不需要出现在文件系统中。

实际上,这两个差异都与文件系统脱钩有关。文件和共享内存对象都是可以读写的字节包,但文件的不同之处在于它们在文件系统中持久存在。