c - 在没有 fork() 的情况下获取 fork()ing 的写时复制行为

标签 c fork copy-on-write

我有一个大缓冲区:

char *buf = malloc(1000000000); // 1GB

如果我 fork 一个新进程,它将有一个 buf,它与父进程的 buf 共享内存,直到一个或另一个写入它。即使那样,内核也只需要分配一个新的 4KiB block ,其余的将继续共享。

我想制作一个 buf 的副本,但我只打算更改副本的一点点。我想要不 fork 的写时复制行为。 (就像你在 fork 时免费获得一样。)

这可能吗?

最佳答案

您需要在磁盘上创建文件或为 block 创建 POSIX 共享内存段 (shm_open)。第一次,用 MAP_SHARED 映射它。当您准备好复制并切换到 COW 时,使用 MAP_FIXEDMAP_PRIVATE 再次调用 mmap 以在原始 map 之上进行映射,并使用 MAP_PRIVATE 制作第二个副本。这应该能让您获得想要的效果。

关于c - 在没有 fork() 的情况下获取 fork()ing 的写时复制行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10998943/

相关文章:

rust - 支持 String 和 &str 的 Hashmap

C编程: malloc() inside another function

c - 段错误(核心转储)问题,堆栈

c - 使用 fork() 作为线程应用程序的后台

c - popen() 的安全版本?

java - 如何从 Java 中的 CopyOnWriteArrayList 中获取底层静态数组?

c - 可以检索 glib 'event?' 上剩余的时间

c - 带有部分窗口标题的 FindWindow (Windows, C)

c - 如何查找底层 Linux 内核是否支持写时复制?

c++ - 在 MyVector 中实现写时复制习惯用法