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