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



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

相关内容

  • 没有找到相关文章

最新更新