本文主要是介绍Valgrind内存管理工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
内存管理是软件开发中最为重要的环境,如果一个长期运行的程序,即使其中的某个函数每一次泄露1KB的内存空间,该函数每1分钟调用100次,100天后,将产生60*24*10*1KB=1.44GB的内存空间,对于一般系统来说,其实早已处于死机的状态。如何能够查看这种内存泄露呢,可以使
用Valgrind内存管理工具。
一:Valgrind简介 Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。 遵守GNU通用公共许可证条款,是一款自由软件。此工具由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架,模拟了一个CPU环境,并提供服务给其他工具:而其他工具则类似于插件, 利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构如下图所示:
Valgrind包括以下工具:
1.memcheck 探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用,因此memcheck工具能够探测到以下问题:
(1)使用为初始化的内存。
(2)读/写已经被释放的内存。
(3)读/写不恰当的内存空间。
(4)读写内存越界。
(5)内存泄露。
(6)使用malloc/new/new[]和free/delete/delete[]不匹配。
(7)src和dst的重叠
2.Callgrind 它主要用来检查程序中函数调用过程中出现的问题。
3.Cachegrind它主要用来检查程序中缓存使用出现的问题。
4.Helgrind它主要用来检查多线程程序中出现的竞争问题。
5.Massif它主要用来检查程序中堆栈使用中出现的问题。
6.Extension可以利用core提供的功能,自己编写特定的内存调试工具。
二:下载与安装
Valgrind可以使用源码安装,也可以使用软件包更新方法,在ubuntu系统下,可以使用一下命令跟新:
sudo apt-get install valgrind
或
http://www.valgrind.org
#wget http://www.valgrind.org/downloads/valgrind-3.8.1.tar.bz2
#tar xvf valgrind-3.8.1.tar.bz2
#cd valgrind-3.8.1
#./configure --prefix=/usr/local/webserver/valgrind
#make
#make install
三:Valgrind常用选项
表3-2~表3-5列出了了常用选项:
四:测试代码
代码如下:
编译
#gcc -g -o bug bug.c
内存检查
#valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./bug
报告:
这篇关于Valgrind内存管理工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!