当我 cat /proc/1/smaps 文件时,我发现库通常有多达 4 个不同大小和不同 Rss/Pss 等的映射:
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 1636 kB
Rss: 980 kB
Pss: 9 kB
Shared_Clean: 980 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 980 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd ex mr mw me
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 2044 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: mr mw me
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 16 kB
Rss: 16 kB
Pss: 14 kB
Shared_Clean: 0 kB
Shared_Dirty: 4 kB
Private_Clean: 12 kB
Private_Dirty: 0 kB
Referenced: 12 kB
Anonymous: 16 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd mr mw me ac
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 8 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Anonymous: 8 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd wr mr mw me ac
有人可以告诉我为什么或指出一篇文章吗?
答案1
一般来说,库具有从文件加载的三种不同类型的内存。这些都是:
- code -- 库中实际的可执行代码
- rodata——只读数据(常量值)。
- 数据——可写数据。
这些映射有不同的权限。如果您查看每个映射的第一行:
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
表中的第二列包含每个映射块的权限。第一个块具有权限r-xp
。这是代码块,因此可读且可执行。
第二块有---p
.该块不可访问。它可能包含调试符号或执行程序实际不需要的一些其他数据。
第三块有r--p
.这是只读数据段。最后一个块有rw-p
.这是可写数据段。
Rss和Pss等值不同的原因仅仅是由于每个区域访问的内存量不同。
/proc/[pid]/smaps
如果您对各个字段的含义感到好奇,请查看过程手册页。每个部分的标题行都记录在该/proc/[pid]/maps
部分中。