Shared memory mmap()调用常规文件和mmap()调用POSIX共享内存文件之间有什么区别?

Shared memory mmap()调用常规文件和mmap()调用POSIX共享内存文件之间有什么区别?,shared-memory,mmap,Shared Memory,Mmap,我想使用mmap()在进程之间共享内存。mmap()可以应用于常规文件或POSIX共享内存文件(shm_open)。但是有什么区别呢?区别当然不是磁盘是否被访问: 经常访问和最近访问的常规文件位于文件系统缓存/缓冲区中,因此它们的内容已经在内存中 即使将mmap()与shm_open()一起使用,当系统处于高内存压力下时,该内存区域也可能被调出 一个区别是,尽管共享内存可能会写入磁盘,但它永远不会永久写入磁盘。如果您创建了一个普通文件,那么它会在重新启动时持续存在。如果创建共享内存对象,则不会

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

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

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

另一个不同之处是“”。因此,尽管共享内存对象具有类似文件的路径,但它实际上不需要出现在文件系统中


实际上,这两个区别都是关于与文件系统的分离。文件和共享内存对象都是可以读写的字节包,但文件的不同之处在于它们被持久化在文件系统中。

啊,对了,我完全忘记了在引导过程中持久化的事情。