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

时间:2013-04-19 19:19:21

标签: linux memory-management

zero (deleted)列下的Mapping是否意味着Linux中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

1 个答案:

答案 0 :(得分:1)

您可以观察到shared列下“ s ”指示的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输出中。