如何详细实现并检测C语言中的内存泄漏的完整流程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1123个文字,预计阅读时间需要5分钟。
目录+内存泄漏+带来的问题+难点+hook实现泄漏判断与追踪(malloc和free重载)+宏定义实现hook+内存泄漏+malloc/new调用在堆上分配的内存却没有相应的free/delete;+带来的问题+会逐渐吃掉虚拟内存
目录
- 内存泄漏
- 带来的问题
- 难点
- hook实现泄漏判断与追踪(malloc和free重载)
- 宏定义实现hook
内存泄漏
malloc/new 调用在堆上分配的内存却没有相应的free/delete;
带来的问题
会逐渐吃掉虚拟内存
难点
如何判断是否内存泄漏
- (最毛糙)可以使用+1和-1,即当调用分配内存变量+1,释放内存时候,变量-1,进程退出输出的count=0,进程内存没有泄漏,否则有泄漏;
- 线上版本,做一个配置文件,设置是否存在内存泄漏的一个标志位,平时肉眼观察不出的内存泄漏,在长时间的运行积攒下,肯定会逐渐变大,然后当可以观察出有内存泄漏了,就将标志位置位1;进行热更新,释放相应的泄漏处理(如 hook);
如何判断在代码中哪里泄漏
- 当已经怀疑有泄漏:使用简单的mtrace直接检查代码也是一个简单的操作。
本文共计1123个文字,预计阅读时间需要5分钟。
目录+内存泄漏+带来的问题+难点+hook实现泄漏判断与追踪(malloc和free重载)+宏定义实现hook+内存泄漏+malloc/new调用在堆上分配的内存却没有相应的free/delete;+带来的问题+会逐渐吃掉虚拟内存
目录
- 内存泄漏
- 带来的问题
- 难点
- hook实现泄漏判断与追踪(malloc和free重载)
- 宏定义实现hook
内存泄漏
malloc/new 调用在堆上分配的内存却没有相应的free/delete;
带来的问题
会逐渐吃掉虚拟内存
难点
如何判断是否内存泄漏
- (最毛糙)可以使用+1和-1,即当调用分配内存变量+1,释放内存时候,变量-1,进程退出输出的count=0,进程内存没有泄漏,否则有泄漏;
- 线上版本,做一个配置文件,设置是否存在内存泄漏的一个标志位,平时肉眼观察不出的内存泄漏,在长时间的运行积攒下,肯定会逐渐变大,然后当可以观察出有内存泄漏了,就将标志位置位1;进行热更新,释放相应的泄漏处理(如 hook);
如何判断在代码中哪里泄漏
- 当已经怀疑有泄漏:使用简单的mtrace直接检查代码也是一个简单的操作。

