通过Valgrind的Massif工具进行C++内存使用分析
关于Valgrind的简介可以参考:https://www.geek-share.com/detail/2660392185.html
Valgrind在Ubuntu上的安装可以参考:https://www.geek-share.com/detail/2718266749.html
可以使用Valgrind的memcheck工具来检查是否有内存泄漏,可以使用massif工具来对内存使用情况进行分析。这里简单介绍下massif工具的使用。
Massif工具的官网介绍可以参考:http://valgrind.org/docs/manual/ms-manual.html
Massif是一个堆分析器,它能够测量程序使用了多少堆内存,是一个内存剖析工具,通过不断的取程序堆的快照来达到监视程序内存分配的目的。可以非常容易的获取到内存使用峰值。它也可以测量程序使用栈的大小,默认情况下此选项是关闭的。通过对结果的分析,Massif工具可以帮助减少程序的内存使用量,它会提供非常详细的信息,指出程序中的哪一部分负责分配堆内存。
这里通过GitHub中的Messy_Test(https://github.com/fengbingchun/Messy_Test )项目对Massif工具的使用过程进行说明,以调用二叉树接口为例:binary_search_tree_::test_binary_search_tree(),将终端定位到prj/linux_cmake_CppBaseTest目录下,依次执行以下命令:
[code]./build.sh valgrind --tool=massif ./build/CppBaseTest
执行结果如下:
并会在当前目录下生成massif.out.24949文本文件,其中24949为进程号,此文件中详细记录了执行此测试程序时内存的使用情况,执行以下命令:
[code]ms_print massif.out.24949
结果如下:显示内存使用峰值为87.35KB以及程序中的哪一行有内存分配等详细信息。
使用ms_print显示可视化效果不好,可以通过massif-visualizer对结果进行可视化显示。
massif-visualizer在Ubuntu 14.04上安装过程如下:
1. 从 https://launchpad.net/ubuntu/trusty/amd64/massif-visualizer/0.3-0ubuntu3 下载 massif-visualizer_0.3-0ubuntu3_amd64.deb;
2. 双击massif-visualizer_0.3-0ubuntu3_amd64.deb进行安装(通过Ubuntu Software Center)。
执行命令:
[code]massif-visualizer massif.out.24949
结果如下:
如果程序执行时间较短,可以增加--time-unit=B选项,即:
[code]valgrind --tool=massif --time-unit=B ./build/CppBaseTest
为了获得每个快照详尽的信息,可以增加--detailed-freq=1选项,详细的快照信息在图表中由”@”字符组成的条形图表示。默认情况下,10个快照中只有第10个快照是详细的。即:
[code]valgrind --tool=massif --detailed-freq=1 ./build/CppBaseTest
阅读更多
- 内存使用分析工具Valgrind简单用法
- 在Android环境中使用Valgrind工具进行内存错误检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 【PE】如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- iOS测试系列】instruments工具的使用(一)- 通过leaks分析内存泄露
- iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 【iOS测试系列】instruments工具的使用(一)- 通过leaks分析内存泄露
- 使用valgrind的callgrind工具进行多线程性能分析
- 使用valgrind的callgrind工具进行多线程性能分析
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
- 《JVM故障诊断指南》之5 —— HPROF :使用Eclipse Memory Analyzer 工具 (MAT)进行内存泄露分析
- 如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测(转载)
- Linux C++程序进行性能分析工具gprof使用入门