linux下简单测试一个函数有无内存泄漏

 

利用top以及valgrind命令去查找测试,

1.利用valgrind命令。这个命令大概是这样使用的: valgrind --tool=memcheck --show-reachable=yes ./a.out  

然后可以得到一个这样的东西:

/*
==2741== 
==2741== ERROR SUMMARY: 1173925 errors from 285 contexts (suppressed: 35 from 1)
==2741== malloc/free: in use at exit: 359,172 bytes in 1,584 blocks.
==2741== malloc/free: 4,058 allocs, 2,474 frees, 31,717,527 bytes allocated.
==2741== For counts of detected errors, rerun with: -v
==2741== searching for pointers to 1,584 not-freed blocks.
==2741== checked 1,886,784 bytes.
==2741== 
==2741== LEAK SUMMARY:
==2741==    definitely lost: 1,392 bytes in 2 blocks.
==2741==      possibly lost: 15,812 bytes in 512 blocks.
==2741==    still reachable: 341,968 bytes in 1,070 blocks.
==2741==         suppressed: 0 bytes in 0 blocks.
==2741== Use --leak-check=full to see details of leaked memory.
*/

可以大概的知道开辟了多少空间,释放了多少,丢失了多少等信息,比较直观的反应出来

2.利用top命令: top | grep a.out

自己写一个测试程序a.out,while(1)循环调用需要测试的函数,得到的界面大概这样的

看如图所示红框内,程序在运行期间内存不断在上涨,基本上可以判断该函数存在内存泄漏,建议大家实际测试时,如果这一项内存增长不是很快速的的话,测试时间长一点,一天,一周甚至更长,将该命令执行结果重定向到一个文件里,如果重定向到文件,top命令需要加上-b参数,否则文件会乱码,建议加上-d参数设定一个时间,单位是秒 ,

例:top -b -d 10 | grep a.out  >> top.txt ,10秒钟执行一次该命令,并将结果重定向到top.txt中。

至于找内存泄漏点就比较简单了,从后往前注释代码,编译再去看内存泄漏情况。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值