首页 > 其他 > 详细

内存泄漏和检测方法

时间:2020-08-20 16:24:19      阅读:72      评论:0      收藏:0      [点我收藏+]

一、内存泄漏概念

  动态申请的内存(new、malloc等),没有进行释放处理;在程序持续运行过程中,占用的系统内存会越来越多。

二、泄漏检测方法

1.检测之valgrind

// 编译添加–g参数
//valgrind --leak-check=full --show-reachable=yes --trace-children=yes ./ttsTestMain 
valgrind --tool=memcheck ./ttsTestMain 执行结果: ==29653== ==29653== HEAP SUMMARY: ==29653== in use at exit: 6,621 bytes in 65 blocks ==29653== total heap usage: 179 allocs, 114 frees, 2,412,787 bytes allocated ==29653== ==29653== LEAK SUMMARY: ==29653== definitely lost: 0 bytes in 0 blocks ==29653== indirectly lost: 0 bytes in 0 blocks ==29653== possibly lost: 0 bytes in 0 blocks ==29653== still reachable: 6,621 bytes in 65 blocks ==29653== suppressed: 0 bytes in 0 blocks ==29653== Rerun with --leak-check=full to see details of leaked memory ==29653== ==29653== For counts of detected and suppressed errors, rerun with: -v ==29653== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

2.检测之tcmalloc

 

依赖库:libunwind-1.1  gperftools

通过 LD_PRELOAD 设置链接的堆栈处理库
通过 HEAPPROFILE 设置生成分析文件的位置

设置环境记录到文件:
env LD_PRELOAD="/home/app4/e2e_Tts/lib/tcmalloc/libtcmalloc.so" HEAPPROFILE="./perf_log/perf_leak.log" ./ttsTestMain

查看文件信息:
pprof --text /usr/bin/ls ./perf_log/perf_leak.log.0020.heap  # 读取 heap 转化成分析结果

直接打印:
env PPROF_PATH=./pprof HEAPCHECK=normal ./ttsTestMain

 

 

3.检测之函数重载

C++环境下,我们通过new操作来申请内存,通过delete操作来释放内存,所以如果能够改写默认的new和delete操作的行为,就可以检测内存的状态。
参考:https://www.jianshu.com/p/060063f91f5e
问题:使用vector.pushback时core,待后续分析
====待补充

 

内存泄漏和检测方法

原文:https://www.cnblogs.com/cyblogs/p/13534724.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!