是否可以使用mmap将现有内存块附加到文件

时间:2013-09-10 16:08:27

标签: c++ mmap

我有一块使用mmap分配的内存块。然后我想将这块内存写入文件系统上的文件。我想知道是否有办法使用mmap()将现有的内存块直接指向文件描述符,或者我是否必须将整个内存块复制到使用文件描述符创建的新mmap()区域?

3 个答案:

答案 0 :(得分:0)

除非您可以首先使用临时文件创建mmap,然后在要“保存”它时重命名该文件,否则您将对其进行顶级复制。

我不熟悉所有实现,我已经仔细研究了Linux实现,但我相信这适用于所有情况:当您在创建mmap区域时没有文件时,操作系统将{swap'用作file区域的mmap。由于文件内容和内存内容之间存在映射,因此您不能轻易地只更改映射的内容(尽管可能在技术上可能实现,但如果您有一个,则可能相当“昂贵”) 4GB mmap区域,其中只有一小部分位于物理RAM中,其余部分位于“磁盘上”。)

答案 1 :(得分:0)

假设我们说的是纯POSIX,则无法将mmap'd区域附加到新的fd。我也不知道在Linux或OS X中有任何方法可以做到这一点。

您必须首先复制或mmap您要写入的文件。如果您不希望文件由于某种原因立即显示,则有以下解决方法:

  • open文件系统中您想要最终文件的临时文件(同一目录是安全的赌注)
  • mmap它,修改它,写出更改
  • rename文件到最终位置。

答案 2 :(得分:0)

您可以将00 === 00 // No render ["0", "0"] !== ["0", "0"] // Re-Render React.memo(MyComponent, areEqual); 一起使用,以将内存放入管道中,之后vmspliceSPLICE_F_GIFT可以完成所需的操作。