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

Posted codestack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊一聊内存泄漏 ------在valgrind检查不出来时怎么办??相关的知识,希望对你有一定的参考价值。

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

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检查不出来时怎么办??的主要内容,如果未能解决你的问题,请参考以下文章

聊一聊Redis的离线分析

从读取2.5G的《黄金时代》,我们聊一聊python的内存优化及垃圾回收机制

聊一聊一致性哈希

聊一聊物联网嵌入式芯片的内容结构

经典面试题:聊一聊垃圾回收算法

聊一聊MR过程