内存泄露的查询有很多方式,可以借助自动化工具(github或相关网络资源上找),往往出现内存泄露时可以有以下几种方式来排查:
review代码。如果代码量不是很大,并且有交叉review的习惯。可以在初期解决掉。
使用内存泄露检查工具,网上有很多工具,偶列举几个可以尝试的:
vagrind这个工具会帮你检查出怀疑点,它分好几个等级来怀疑内存泄露,注意确定那个等级。
还有vagrind跑进程需要添加符号表,这样很容易显示出具体代码哪个位置出现泄露。
添加符号表导致动态库太大,无法在板子中复现。可以通过内置的gdb外挂,或者仅仅添加基础libc库的符号表(libc.so应该是这个?)。
mtrace
原理:对malloc函数进行封装和记录改造,使每次调用内存相关的底层函数有依据可查找,。
使用时需要在每个使用过内存函数的地方增加该工具自带的头文件。这点会比较麻烦。
当上面的几种都分析不出来时,需要了解更底层的内存管理机制。
例如:生成的每个线程都会有自己arean内存用于本身线程使用,所以在多线程的情况下会导致arean内存变多,且在达到一定数量后会继续复用。导致最终内存大范围的丢失掉。此时需要将arean每次生成大小要减少。
作者:danny113
链接:https://www.jianshu.com/p/fa2d7df5966e
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。