一般系统的内存泄漏是因为melloc和calloc占用内存,没有释放造成的
如何监控内存泄漏
watch -n .5 'ps -o pid,comm,rss,vsz -p 1147625'
(说明上面的-p后面表示进程的pid,一般这个内存没有持续增长说明内存没有泄漏)
如何定位内存泄漏?
(1)走读代码,看是哪些上下文没有开辟内存但是没有释放;(可能跨线程调用,还有就前面流程调用开辟,后面流程释放内存,比较难定位)
(2)加入代码调试每个函数占用内存的大小;
#include <sys/resource.h>
static int32_t read_memory(void){
struct rusage usage;
if (getrusage(RUSAGE_SELF, &usage) == 0) {
LOG("Memory usage: %ld kilobytes\n", usage.ru_maxrss);
} else {
LOG("getrusage ERROR");
}
return usage.ru_maxrss;
}
(3)如何避免内存泄漏
跑vargrind+单元测试避免内存泄漏
跑asan