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
答案 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输出中。