linux如何对c++进行内存分析
背景
在工作中,我遇到一个问题,需要将c写的进程部署到MCU上。由于MCU上可用的RAM 非常有限,所以在部署时就需要考虑到使用内存大小。所以为了搞清楚,内存的主要消耗在那一块。
分析方法以及原理
原理
在linux 中每个进程在proc 中都有一个对应的文件存储其重要信息。其命令如下:
#!/bin/bash
pid=`ps -ef | grep process_name` # 找到pid
cat /proc/${pid}/smaps # 这个文件中存储该进程的所有内存映射
其结果如下这是一个例子:
5d76f76fb000-5d76f76fc000 r--p 00000000 08:03 3721356 /home/lhd/fastdds_repo/tmp/micro-dds-client/micro_client/examples/SubscribeHelloWorld/build/SubscribeHelloWorldClient
Size: 4 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 4 kB
Pss: 4 kB
Pss_Dirty: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Anonymous: 0 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr mw me sd
5d76f76fc000-5d76f7705000 r-xp 00001000 08:03 3721356 /home/lhd/fastdds_repo/tmp/micro-dds-client/micro_client/examples/SubscribeHelloWorld/build/SubscribeHelloWorldClient
Size: 36 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 36 kB
Pss: 36 kB
Pss_Dirty: 36 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 36 kB
Referenced: 36 kB
Anonymous: 0 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd ex mr mw me sd
5d76f7705000-5d76f770b000 r--p 0000a000 08:03 3721356 /home/lhd/fastdds_repo/tmp/micro-dds-client/micro_client/examples/SubscribeHelloWorld/build/SubscribeHelloWorldClient
Size: 24 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 24 kB
Pss: 24 kB
Pss_Dirty: 24 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 24 kB
Referenced: 24 kB
Anonymous: 0 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr mw me sd
5d76f770b000-5d76f770c000 r--p 0000f000 08:03 3721356 /home/lhd/fastdds_repo/tmp/micro-dds-client/micro_client/examples/SubscribeHelloWorld/build/SubscribeHelloWorldClient
Size: 4 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 4 kB
Pss: 4 kB
Pss_Dirty: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Anonymous: 4 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
THPeligible: 0
VmFlags: rd mr mw me ac sd
5d76f770c000-5d76f770d000 rw-p 00010000 08:03 3721356 /home/lhd/fastdds_repo/tmp/micro-dds-client/micro_client/examples/SubscribeHelloWorld/build/SubscribeHelloWorldClient
Size: 4 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 4 kB
Pss: 4 kB
Pss_Dirty: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Anonymous: 4 kB
KSM: 0 kB
LazyFree: 0 kB
AnonHugePages: