fork() 的手册页声明它不复制数据页,它将它们映射到子进程并放置一个写时复制标志。是那种行为:
- Linux 风格之间是否一致?
- 考虑了实现细节并因此可能会更改?
我想知道我是否可以使用 fork() 作为以便宜的方式获得共享只读内存块的方法。如果内存是物理复制的,那将是相当昂贵的——有很多 fork 正在进行,而且数据区域足够大——但我希望不会……
最佳答案
在没有 MMU(内存管理单元)的机器上运行的 Linux 将复制 fork() 上的所有进程内存。
但是,这些系统通常非常小并且是嵌入式的,您可能不必担心它们。
许多服务,例如 Apache 的 fork 模型,使用 initialize 和 fork() 方法来共享初始化的数据结构。
您应该知道,如果您使用的语言(例如使用引用计数变量的 Perl 和 Python)或 C++ shared_ptr,则此模型将不起作用。它不会工作,因为随着引用计数上下调整,内存变得不共享并被复制。
这会导致 Perl 守护程序(如 SpamAssassin)尝试使用初始化和派生模型时使用大量内存。
关于linux - fork() copy-on-write 是一种稳定的暴露行为,可以用来实现只读共享内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669493/