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)
您可以观察到列下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 输出中。