perl - 在对一条数据进行一次更改后,是否会复制所有标记为写时复制的内存?

标签 perl memory-management fork copy-on-write

我的问题也许是一个措辞不佳的问题,源于我对内存管理的业余理解。

我担心的是:我有一个 Perl 脚本,它会 fork 很多次。正如我从 perldoc 中的 fork 页面所了解的那样,正在实现写时复制。然后每个 child 调用system() ,再次 fork ,调用外部程序。来自外部程序的数据被读回子程序,并作为可存储文件转储,以便在所有子程序退出后由父程序获取和处理。

我担心的是我对这种情况的感知波动。考虑一下我在脑海中看到的最坏情况:
对于每个 child ,只要有新数据到达,整个写时复制内存就会被复制。如果是这种情况,我将在创建几个 fork 后很快遇到内存问题。

但或者,写时复制是否只复制包含所需数据的最小内存块?那么这个内存量是什么?它的尺寸是如何设置的?

我不确定我所要求的具体内容是依赖于语言还是依赖于某些较低级别的过程。

最佳答案

内存按页面组织,通常每个 4K(这可以设置为不同的值,并且是特定于硬件的,但这是具有标准操作系统的英特尔平台上的规范)。当子进程写入写时复制页面时,它将被复制。

关于perl - 在对一条数据进行一次更改后,是否会复制所有标记为写时复制的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739336/

相关文章:

json - 格式错误的 JSON 字符串,既不是数组、对象、数字、字符串也不是原子

python - 如何将现有脚本集成到 Django 中?

iphone - obj_msgSend 之后的 exc_bad_access with retainCount = 2

linux - fork 后线程安全吗?

c - PROCESS SYSTEM CALL中PID的变量类型是什么?

Perl,禁用缓冲输入

perl - Perl Eval 中的警告

使用 cos 时,Cuda 从 __device__ 函数返回错误值

python - Python 中的容器列表 : standard list vs numpy array

visual-studio-2010 - 在Team Foundation Server中,如何 fork 一个项目?