当前位置: 首页 > news >正文

进程内存分布--之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内存分布

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

相关文章:

  • RK3568下GPIO模拟串口
  • 详解数据结构线性表 c++实现
  • 算法进阶指南 货仓选址
  • redis导入成功,缺不显示数据
  • 华为ensp中路由器IPSec VPN原理及配置命令(超详解)
  • Python爬虫教程013:使用CrawlSpider爬取读书网数据并保存到mysql数据库
  • Windows 系统下用 VMware 安装 CentOS 7 虚拟机超详细教程(包含VMware和镜像安装包)
  • 基于 springboot 的在线考试系统
  • React中的跨组件通信
  • 助力三农服务平台设计与实现
  • NVR接入录像回放平台EasyCVR用智能分析高新技术赋能,打造营业厅人员/物品安全的堡垒
  • 代码随想录算法训练营第五十二天|图论专题: 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • 接口异常数组基础题
  • Linux 系统 SVN 源码安装与配置全流程指南
  • python中的in关键字查找的时间复杂度
  • 神经网络基础(NN)
  • Multi-class N-pair Loss论文理解
  • acwing.蛇形矩阵
  • java+postgresql+swagger-多表关联insert操作(六)
  • golang 计时器内存泄露问题 与 pprof 性能分析工具
  • 如今做啥网站能致富/网络营销的目的是什么
  • 零食网站建设策划书模板/重庆seo团队
  • 短租网站建设/百度排名怎么做
  • wordpress打造官网/百度seo怎么收费
  • wordpress导航文件夹/百度搜索排名优化
  • 网站建设与案例管理的心得体会/2022双11各大电商平台销售数据