pmap 输出中的零(已删除)是什么?

Rai*_*han 5 linux memory-management

Linux中命令输出的zero (deleted)underMapping列是什么意思pmap -x pid?它与 有什么不同anon?我无法从手册页中找到任何内容。

Address   Kbytes     RSS   Dirty Mode   Mapping
adf00000     132      36      36 rw---    [ anon ]
adf21000     892       0       0 -----    [ anon ]
ae0ff000       4       0       0 -----    [ anon ]
aea69000     504       0       0 rw-s-  zero (deleted)
aeae7000       4       0       0 -----    [ anon ]
aeae8000    8192      24      24 rw---    [ anon ]
af2e8000   65536   11968       0 rw-s-  apc.eEfjkY (deleted)
b32fd000     236       8       0 r-x--  libxslt.so.1.1.26
b3338000       4       4       4 rw---  libxslt.so.1.1.26
Run Code Online (Sandbox Code Playgroud)

Har*_*K V 3

您可以观察到列下shareds ”指示的映射mode显示为已删除。MAP_SHARED调用中标志声明的共享映射mmap将在 pmap 中显示为已删除,因为进程使用的共享内存区域只需计算一次。

至于零,所有不受文件支持的映射都会被zero初始化。我们知道linux只有在有数据写入的时候才会分配内存。

因此,任何共享且未初始化的区域(进程没有向其写入数据)都将被 pmap 视为zero(deleted).

我还观察到,如果你删除MAP_SHARED并替换为说MAP_PRIVATE

addr = mmap(NULL,4096,PROT_READ | PROT_WRITE,MAP_ANON|MAP_PRIVATE,-1,0)

零(已删除)将不再出现在 pmap 输出中。