欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 进程内存分布--之smaps呈现memory-layout.cpp内存分布

进程内存分布--之smaps呈现memory-layout.cpp内存分布

2025/4/8 9:51:48 来源:https://blog.csdn.net/zjz271674605/article/details/147023504  浏览:    关键词:进程内存分布--之smaps呈现memory-layout.cpp内存分布

上一篇介绍了:进程内存分布--之单线程代码来内存分布呈现memory-layout.cpp

这里我们使用smaps将更加形象的的体现内存分布,smaps文件是Linux的proc文件系统提供的一种可以查看内存资源使用情况的方法,Linux系统中运行的库、堆、栈等信息都可在smaps中查看。 

/proc/PID/smaps显示整体如下:

cat /proc/PID/smaps这个显示的更详细一点:每一行依次对应的是:地址范围、权限、偏移量、设备、文件inode、映射对象

第1行 [可读可执行] 是程序的文本段 

第2行 [只读]………….不清楚 

第3行 [可读可写] 是程序的数据段(包括初始化数据段和未初始化数据段) 

第4行 ………………..堆空间 

第16行 ………………栈空间

vdso 和 vsyscall ……………系统的快速调用

/proc/342796$ cat smaps
00400000-00401000 r-xp 00000000 fc:50 102760452                          /work/oppo_W9050814/memory/memory-analyze/a.out:第1行 [可读可执行] 是程序的文本段
Size:                  4 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                   4 kB
Pss:                   4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         4 kB
Private_Dirty:         0 kB
Referenced:            4 kB
Anonymous:             0 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
ProtectionKey:         0
VmFlags: rd ex mr mw me dw sd 
00600000-00601000 r--p 00000000 fc:50 102760452                          /work/oppo_W9050814/memory/memory-analyze/a.out
……………………………………
00601000-00602000 rw-p 00001000 fc:50 102760452                          /work/oppo_W9050814/memory/memory-analyze/a.out:第3行 [可读可写] 是程序的数据段(包括初始化数据段和未初始化数据段) 
……………………………………
0171f000-01740000 rw-p 00000000 00:00 0                                  [heap]堆空间
Size:                132 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                   4 kB
Pss:                   4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         4 kB
Referenced:            4 kB
Anonymous:             4 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
ProtectionKey:         0
VmFlags: rd wr mr mw me ac sd
7fecd686f000-7fecd6974000 rw-p 00000000 00:00 0 
Size:               1044 kB		//malloc(1024*1024)分配的1024K在这个堆上,p1的地址=0x7fecd686f010
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                  20 kB
Pss:                  20 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:        20 kB
Referenced:           20 kB
Anonymous:            20 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
ProtectionKey:         0
VmFlags: rd wr mr mw me ac sd 
7fb51c000000-7fb51c221000 rw-p 00000000 00:00 0 
Size:               2180 kB		//malloc(2*1024*1024)分配的2028K在这个堆上,p1的地址=0x7fb51c0008c0
KernelPageSize:        4 kB
MMUPageSize:           4 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
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
ProtectionKey:         0
VmFlags: rd wr mr mw me nr sd 7ff5a030f000-7ff5a0310000 ---p 00000000 00:00 0 
……………………………………
7ff5a0310000-7ff5a0b10000 rw-p 00000000 00:00 0 
……………………………………
7ff5a0b10000-7ff5a0b11000 ---p 00000000 00:00 0 
……………………………………
7ff5a0b11000-7ff5a1311000 rw-p 00000000 00:00 0 
…………………………………… 
7ff5a1311000-7ff5a14d1000 r-xp 00000000 fc:01 2241518                    /lib/x86_64-linux-gnu/libc-2.23.so
…………………………………… 
7ff5a14d1000-7ff5a16d1000 ---p 001c0000 fc:01 2241518                    /lib/x86_64-linux-gnu/libc-2.23.so
…………………………………… 
7ff5a16d1000-7ff5a16d5000 r--p 001c0000 fc:01 2241518                    /lib/x86_64-linux-gnu/libc-2.23.so
…………………………………… 
7ff5a16d5000-7ff5a16d7000 rw-p 001c4000 fc:01 2241518                    /lib/x86_64-linux-gnu/libc-2.23.so
…………………………………… 
7ff5a16d7000-7ff5a16db000 rw-p 00000000 00:00 0 
…………………………………… 
7ff5a16db000-7ff5a16f3000 r-xp 00000000 fc:01 2241500                    /lib/x86_64-linux-gnu/libpthread-2.23.so
…………………………………… 
7ff5a16f3000-7ff5a18f2000 ---p 00018000 fc:01 2241500                    /lib/x86_64-linux-gnu/libpthread-2.23.so
…………………………………… 
7ff5a18f2000-7ff5a18f3000 r--p 00017000 fc:01 2241500                    /lib/x86_64-linux-gnu/libpthread-2.23.so
…………………………………… 
7ff5a18f3000-7ff5a18f4000 rw-p 00018000 fc:01 2241500                    /lib/x86_64-linux-gnu/libpthread-2.23.so
…………………………………… 
7ff5a18f4000-7ff5a18f8000 rw-p 00000000 00:00 0 
…………………………………… 
7ff5a18f8000-7ff5a191e000 r-xp 00000000 fc:01 2241510                    /lib/x86_64-linux-gnu/ld-2.23.so
…………………………………… 
7ff5a1afe000-7ff5a1b02000 rw-p 00000000 00:00 0 
…………………………………… 
7ff5a1b1d000-7ff5a1b1e000 r--p 00025000 fc:01 2241510                    /lib/x86_64-linux-gnu/ld-2.23.so
…………………………………… 
7ff5a1b1e000-7ff5a1b1f000 rw-p 00026000 fc:01 2241510                    /lib/x86_64-linux-gnu/ld-2.23.so
…………………………………… 
7ff5a1b1f000-7ff5a1b20000 rw-p 00000000 00:00 0 
…………………………………… 
7fffaa6a7000-7fffaa6c8000 rw-p 00000000 00:00 0                          [stack]栈空间
Size:                132 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                  12 kB
Pss:                  12 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:        12 kB
Referenced:           12 kB
Anonymous:            12 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
ProtectionKey:         0
VmFlags: rd wr mr mw me gd ac 
7fffaa7bd000-7fffaa7c0000 r--p 00000000 00:00 0                          [vvar]
…………………………………… 
7fffaa7c0000-7fffaa7c2000 r-xp 00000000 00:00 0                          [vdso]
…………………………………… 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
…………………………………… 

关注memory-layout.cpp中红色部分:malloc分配的1M和2M内存空间清晰的分布如下: 

$ cat /proc/1101/smaps

00400000-00401000 r-xp 00000000 fc:50 102760452 memory-analyze/a.out:第1行 [可读可执行] 是程序的文本段,下面是不同内存字段大小,后面单独介绍。

Size: 4 kB

KernelPageSize: 4 kB

MMUPageSize: 4 kB

Rss: 4 kB

Pss: 4 kB

Shared_Clean: 0 kB

Shared_Dirty: 0 kB

Private_Clean: 4 kB

Private_Dirty: 0 kB

Referenced: 4 kB

Anonymous: 0 kB

LazyFree: 0 kB

AnonHugePages: 0 kB

ShmemPmdMapped: 0 kB

Shared_Hugetlb: 0 kB

Private_Hugetlb: 0 kB

Swap: 0 kB

SwapPss: 0 kB

Locked: 0 kB

ProtectionKey: 0

VmFlags: rd ex mr mw me dw sd 

00600000-00601000 r--p 00000000 fc:50 102760452 /work/oppo_W9050814/memory/memory-analyze/a.out

……………………………………

00601000-00602000 rw-p 00001000 fc:50 102760452

memory-analyze/a.out:第3行 [可读可写] 是程序的数据段(包括初始化数据段和未初始化数据段) 

……………………………………

0171f000-01740000 rw-p 00000000 00:00 0 [heap]堆空间

Size: 132 kB

KernelPageSize: 4 kB

MMUPageSize: 4 kB

Rss: 4 kB

Pss: 4 kB

Shared_Clean: 0 kB

Shared_Dirty: 0 kB

Private_Clean: 0 kB

Private_Dirty: 4 kB

Referenced: 4 kB

Anonymous: 4 kB

LazyFree: 0 kB

AnonHugePages: 0 kB

ShmemPmdMapped: 0 kB

Shared_Hugetlb: 0 kB

Private_Hugetlb: 0 kB

Swap: 0 kB

SwapPss: 0 kB

Locked: 0 kB

ProtectionKey: 0

VmFlags: rd wr mr mw me ac sd

7fecd686f000-7fecd6974000 rw-p 00000000 00:00 0 

Size: 1044 kB         //malloc(1024*1024)分配的1024K在这个堆上,p1的地址=0x7fecd686f010。0x7fecd6974000-0x7fecd686f000=0x105000=1069056=1069056/1024=1044 kB

KernelPageSize: 4 kB

MMUPageSize: 4 kB

Rss: 20 kB

Pss: 20 kB

Shared_Clean: 0 kB

Shared_Dirty: 0 kB

Private_Clean: 0 kB

Private_Dirty: 20 kB

Referenced: 20 kB

Anonymous: 20 kB

LazyFree: 0 kB

AnonHugePages: 0 kB

ShmemPmdMapped: 0 kB

Shared_Hugetlb: 0 kB

Private_Hugetlb: 0 kB

Swap: 0 kB

SwapPss: 0 kB

Locked: 0 kB

ProtectionKey: 0

VmFlags: rd wr mr mw me ac sd 

7fb51c000000-7fb51c221000 rw-p 00000000 00:00 0 

Size: 2180 kB         //malloc(2*1024*1024)分配的2028K在这个堆上,p1的地址=0x7fb51c0008c0

KernelPageSize: 4 kB

MMUPageSize: 4 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

LazyFree: 0 kB

AnonHugePages: 0 kB

ShmemPmdMapped: 0 kB

Shared_Hugetlb: 0 kB

Private_Hugetlb: 0 kB

Swap: 0 kB

SwapPss: 0 kB

Locked: 0 kB

ProtectionKey: 0

VmFlags: rd wr mr mw me nr sd 

7ff5a030f000-7ff5a0310000 ---p 00000000 00:00 0 

……………………………………

7ff5a0310000-7ff5a0b10000 rw-p 00000000 00:00 0 

……………………………………

7ff5a0b10000-7ff5a0b11000 ---p 00000000 00:00 0 

……………………………………

7ff5a0b11000-7ff5a1311000 rw-p 00000000 00:00 0 

…………………………………… 

7ff5a1311000-7ff5a14d1000 r-xp 00000000 fc:01 2241518 /lib/x86_64-linux-gnu/libc-2.23.so

…………………………………… 

7ff5a14d1000-7ff5a16d1000 ---p 001c0000 fc:01 2241518 /lib/x86_64-linux-gnu/libc-2.23.so

…………………………………… 

7ff5a16d1000-7ff5a16d5000 r--p 001c0000 fc:01 2241518 /lib/x86_64-linux-gnu/libc-2.23.so

…………………………………… 

7ff5a16d5000-7ff5a16d7000 rw-p 001c4000 fc:01 2241518 /lib/x86_64-linux-gnu/libc-2.23.so

…………………………………… 

7ff5a16d7000-7ff5a16db000 rw-p 00000000 00:00 0 

…………………………………… 

7ff5a16db000-7ff5a16f3000 r-xp 00000000 fc:01 2241500 /lib/x86_64-linux-gnu/libpthread-2.23.so

…………………………………… 

7ff5a16f3000-7ff5a18f2000 ---p 00018000 fc:01 2241500 /lib/x86_64-linux-gnu/libpthread-2.23.so

…………………………………… 

7ff5a18f2000-7ff5a18f3000 r--p 00017000 fc:01 2241500 /lib/x86_64-linux-gnu/libpthread-2.23.so

…………………………………… 

7ff5a18f3000-7ff5a18f4000 rw-p 00018000 fc:01 2241500 /lib/x86_64-linux-gnu/libpthread-2.23.so

…………………………………… 

7ff5a18f4000-7ff5a18f8000 rw-p 00000000 00:00 0 

…………………………………… 

7ff5a18f8000-7ff5a191e000 r-xp 00000000 fc:01 2241510 /lib/x86_64-linux-gnu/ld-2.23.so

…………………………………… 

7ff5a1afe000-7ff5a1b02000 rw-p 00000000 00:00 0 

…………………………………… 

7ff5a1b1d000-7ff5a1b1e000 r--p 00025000 fc:01 2241510 /lib/x86_64-linux-gnu/ld-2.23.so

…………………………………… 

7ff5a1b1e000-7ff5a1b1f000 rw-p 00026000 fc:01 2241510 /lib/x86_64-linux-gnu/ld-2.23.so

…………………………………… 

7ff5a1b1f000-7ff5a1b20000 rw-p 00000000 00:00 0 

…………………………………… 

7fffaa6a7000-7fffaa6c8000 rw-p 00000000 00:00 0 [stack]栈空间

Size: 132 kB

KernelPageSize: 4 kB

MMUPageSize: 4 kB

Rss: 12 kB

Pss: 12 kB

Shared_Clean: 0 kB

Shared_Dirty: 0 kB

Private_Clean: 0 kB

Private_Dirty: 12 kB

Referenced: 12 kB

Anonymous: 12 kB

LazyFree: 0 kB

AnonHugePages: 0 kB

ShmemPmdMapped: 0 kB

Shared_Hugetlb: 0 kB

Private_Hugetlb: 0 kB

Swap: 0 kB

SwapPss: 0 kB

Locked: 0 kB

ProtectionKey: 0

VmFlags: rd wr mr mw me gd ac 

7fffaa7bd000-7fffaa7c0000 r--p 00000000 00:00 0 [vvar]

…………………………………… 

7fffaa7c0000-7fffaa7c2000 r-xp 00000000 00:00 0 [vdso]

…………………………………… 

ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

…………………………………… 

能不能更直观点呢:参考:

PS: 下一篇我们介绍:​​​​​​​进程内存分布--之pmap呈现memory-layout.cpp内存分布

关注我,后续还有更多专题博文分享,谢谢!!!  

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词