内存泄漏检测组件 -- 内存泄漏

目录

内存泄漏的原因?

内存泄漏会产生哪些后果?

内存泄漏如何解决?

内存泄漏检测如何实现?


C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

内存泄漏的原因?

内存泄漏是在没有自动gc的编程语言里面,经常发生的一个问题。因为没有gc,所以分配的内存需要程序员自己调用释放。其核心原因是调用分配与释放没有符合开闭原则,没有配对,形成了有分配,没有释放的指针,从而产生了内存泄漏。

{

void*p1=malloc(s2);

void*p2=malloc(s1);

free(p1);

}

以上代码段,分配了s1,s2大小的内存块分配由p1与p2指向。而代码块执行完以后,释放了p1,而p2没有释放。形成了有分配没有释放的指针,产生了内存泄漏。

内存泄漏会产生哪些后果?

随着工程代码量越来越多,自然内存泄漏的排查就成为了一个很头疼的问题。有分配没有释放,自然会使得进程堆的内存会越来越少,直到耗尽。会造成后面的运行时代码不能成功分配内存。

内存泄漏如何解决?

内存泄漏是没有自动gc的编程语言所产生的

解决方案一,引入gc。这是根治内存泄漏的最好的方案。但是这样的方案有失去了c/c++语言的优势。

方案二,当发生内存泄漏的时候,能够精准的定位代码哪一行所引起的。这也是我们实现内存泄漏检测的如何核心实现需求。

需求1:能够检测出来内存泄漏

需求2:能够判断是由代码哪一行引起的内存泄漏

内存泄漏检测如何实现?

内存泄漏是由于内存分配与内存释放,不匹配所引起的。对内存分配函数malloc/calloc/realloc,以及内存释放free进行“劫持”hook。能够统计出内存分配的位

置,内存释放的位置,从而判断是否匹配。

方案一:采用__libc_malloc,__libc_malloc与__builtin_return_address

方案二:采用宏定义

方案三:借助malloc.h里面malloc_hook

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值