利用mtrace检查内存泄漏

 大家都知道,内存泄漏是每一个程序员和公司最关注的问题。因为此问题可以说是一个定时炸弹且不容易发现。
在华为等一些著名的软件公司都十分注意和关心这个问题。一次在听华为一个驱动组的主管的讲座时,他多次的有意识的提到了这个问题,也再次证明了越是经验丰富的老开发人员越关心内存这块雷区,但我们最常去的地方恰恰也就是这块雷区了。
最近可能是我们主管在参加什么翻译国外技术书籍(不知道他是否要出书呢,唉,以后逛书店大家真的要好好挑一下书了)。没事就会问我一些奇怪的技术问题,不过,今天这个问题我还是比较有兴趣的,是一个检查内存泄漏的东东,自己研究了一下,感觉还是比较好用的,推荐给大家,希望以后大家都写出安全的漂亮的代码。
正文:
[在代码中的概貌]
#include <mcheck.h>   /* 要包含它 */
mtrace();
...
/* 要检查是否会有内存泄露的代码段; */
...
muntrace();

[代码编好后,在命令行下编译我们的代码]
[step1]
#gcc main.c -o main
[step2]
/* The environment variable MALLOC_TRACE defines  a  file  where  mtrace() writes  its output.
 * 用MALLOC_TRACE这个环境变量来定义一个文件log用于输出;
*/
#export MALLOC_TRACE=./log  
[step3]
#./main
[step4]
#cat log
 下面这个是用系统的命令来看内存泄漏信息
[更易懂的格式]
#mtrace --help   /* 自己help一下,这个命令很简单地 */
P.S. 其实更好用的是你完全可以仅仅编译,而不用连接生成一个ELF文件,就可以检查内存泄漏的信息了。
e.g: #gcc -c main.c -o main.o
我的理解是其实这个命令就是在代码被编译,连接后从.txt段中来看malloc和free是否配对了。原来自己也傻忽忽的
写过检查自己代码是否有内存泄漏的一个小函数,当时印象中就是看其是否配对。现在才知道,原来这种常用的大家都关注的问题早有工具了。以后不能闭门造车了的说。
(如果你还不理解一段代码是如何变成一个计算机可以认识的二进制的程序的,建议你看看我原来的一篇文章,名字貌似叫“深入理解程序生成过程”,自己找找吧,我比较懒)
[下面是自己写的一段小实例代码,你可以COPY过去,来玩一下mtrace]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值