【发布时间】:2012-06-15 11:16:57
【问题描述】:
我有一个很大的缓冲区:
char *buf = malloc(1000000000); // 1GB
如果我派生了一个新进程,它将有一个与父进程共享内存的 buf,直到其中一个或另一个写入它。即使这样,内核也只需要分配一个新的 4KiB 块,其余的将继续共享。
我想制作一个 buf 的副本,但我只会更改一点副本。我想要不分叉的写时复制行为。 (就像你在分叉时免费获得一样。)
这可能吗?
【问题讨论】:
-
当然可以,但它不会是“免费的”——您必须自己管理内存并跟踪更改。
-
是的,我想要“免费”。我想知道是否有任何基于 mmap 的解决方案,或者我什至没有想到的解决方案。
-
也许带有 MAP_ANONYMOUS 和 MAP_PRIVATE 的 mmap 可以完成这项工作?
-
1000000000字节不是 1 GB。应该是1073741824(1024 * 1024 * 1024)。
标签: c fork copy-on-write