fad*_*bee 8 c fork copy-on-write
我有一个大缓冲区:
char *buf = malloc(1000000000); // 1GB
Run Code Online (Sandbox Code Playgroud)
如果我分叉一个新进程,它将有一个buf,它与父进程的buf共享内存,直到一个或另一个写入它.即使这样,内核也只需要分配一个新的4KiB块,其余的将继续共享.
我想复制一下buf,但我只想改变一点副本.我想要不写分支的写时复制行为.(就像你在分叉时免费获得的那样.)
这可能吗?
您将要在磁盘上创建文件或shm_open为块创建POSIX共享内存段().第一次,用它来映射MAP_SHARED.当您准备复制并切换到COW时,请mmap使用MAP_FIXED和再次调用MAP_PRIVATE原始地图的顶部,然后MAP_PRIVATE再制作第二个副本.这应该可以获得你想要的效果.