码迷,mamicode.com
首页 > 其他好文 > 详细

聊一聊内存泄漏 ------在valgrind检查不出来时怎么办??

时间:2020-05-29 23:31:25      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:优先   review   退出   源码   设备   call   style   内存   man   

这几天多个版本出现了多个内存泄漏问题-----------------------------------------怎么办????

Q1:进程调用某库函数分配内存不释放, 但是在进程退出时,统一释放内存,valgrind 检查不出来,但是频繁调用库函数会耗尽内存。怎么快速定位那个库函数导致!!!!!除了看源码这种sa办法

Q2:某些设备不支持跑valgrind 怎么办??-

 

 

目前C&C++ 动态分配内存都是使用malloc-free  new-delete 

所以第一个方法是 每次分配内存时先记录下来 释放时记录下来 这样一对比就出来。。。or malloc记录地址  free 去掉记录地址

最后剩下的就是 没有释放的。。。。

第二个方法就是hook malloc了

 

http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Hooks-for-Malloc.html

 

再就是 http://jemalloc.net/jemalloc.3.html#arena.i.chunk_hooks

 

第三个:malloc是一个weak symbol,所以直接写一个malloc同名函数就行,同名函数中可以通过符号 __libc_malloc,这个符号直接指向malloc的实现部分 

--------------->GCC wrap

ld中有一个选项 –wrap,当查找某个符号时,它优先先解析__wrap_symbol, 解析不到才去解析symbol。

好像对C++的new不起作用。

extern void *__libc_malloc(size_t size);
void* malloc (size_t size)
{
  // do your stuff
  {
  }
  // call the original malloc
  return __libc_malloc(size);
}

再就是mtrace 了

 

再就是对比之前版本---看下这个版本改了什么了。。。再或者就是看覆盖率,那些没有跑到,然后review代码了。。。

还要啥方法?????????????????????

 

聊一聊内存泄漏 ------在valgrind检查不出来时怎么办??

标签:优先   review   退出   源码   设备   call   style   内存   man   

原文地址:https://www.cnblogs.com/codestack/p/12989917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!