Linux下pmap -x pid
命令输出Mapping
列下的zero (deleted)
是什么意思?它和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
您可以观察到mode
列下的's'表示的shared
映射显示为已删除。在mmap
调用中由MAP_SHARED
标志声明的共享映射将在pmap中显示为已删除,因为进程使用的共享内存区域必须只计数一次。
对于0,所有不受文件支持的映射都被zero
初始化。我们知道linux只在数据写入时才分配内存。
因此,任何共享的和未初始化的区域(未被进程写入数据)将被pmap计入zero(deleted)
。
我还观察到,如果你删除MAP_SHARED
并将其替换为MAP_PRIVATE
,
addr = mmap(NULL,4096,PROT_READ | PROT_WRITE,MAP_ANON|MAP_PRIVATE,-1,0)
0(已删除)将不再出现在pmap输出中。