我有一块使用mmap分配的内存块。然后我想将这块内存写入文件系统上的文件。我想知道是否有办法使用mmap()将现有的内存块直接指向文件描述符,或者我是否必须将整个内存块复制到使用文件描述符创建的新mmap()区域?
答案 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);
一起使用,以将内存放入管道中,之后vmsplice
或SPLICE_F_GIFT
可以完成所需的操作。