如何详细描述内存泄漏检测与实现的具体步骤?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1121个文字,预计阅读时间需要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直接检查代码也是一个简单的操作。
本文共计1121个文字,预计阅读时间需要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直接检查代码也是一个简单的操作。

