前些天 发现 某代码存在内存泄露,使用 二分法+注释的方法很快定位到 某个函数, 发现 是 框架存在内存泄露,以及自己之前修正一个框架BUG 导致新引入的一个局部对象内部分配的堆内存 没释放导致的,这没什么好说的,
但是,随后一个同事也碰到某个代码也有内存泄露的问题,他分析了很久,没定位出问题,让我帮忙看下。
他已经定位到某个比较大的函数发生了内存泄露, 但这个函数内部逻辑较多,调用了若干子函数, 问题在于 这个函数内部流程相关性很强,导致 不好用注释的方法来寻找,
不知怎么地,突然就想到了个方法,这个方法是 注释的反面, 大概方法如下:
假如现在排查某个部分,比如说子函数A 有没有导致内存泄露,那么先执行一遍A, 把A产生的结果,一般就是填充了某些容器,比如vector, 保存起来, 然后把A执行1万遍,反正是个很大的数字,这样, 如果 A 有内存泄露的情况,那么 很容易观察到。