内存泄漏检测工具总结

视频1:https://www.bilibili.com/video/BV1hY4y1u7XK/?spm_id_from=333.337.search-card.all.click&vd_source=7a1a0bc74158c6993c7355c5490fc600

内存泄漏原因:malloc/new 没有与之匹配的 free/delete

泄漏的是虚拟内存,因为虚拟内存到物理内存的映射是由OS管理的,而我们所编写的程序只是用户程序。

 

一个经典问题:线上内存泄漏,htop/top 虚拟内存一直在涨。如何解决这样的问题?

高效的解决方案:定位到哪一行malloc没有free,定位到哪个指针没有释放。

 

两个问题:

1. 如何确定内存泄漏。“htop/top看到虚拟内存在涨”只能用于猜测

2. 如何定位到哪一行malloc没有free,定位到哪个指针没有释放。

 

线上系统要把 trace 写入文件里,不能打印出来(会淹没在信息流里)

一个线上系统的内存泄漏检测方案(可以解决上述两个问题):

1. 当调用malloc时,在mem文件夹下创建一个文件,文件名是分配的内存地址

2. 当调用free时,删除掉那个文件

如此一来,只要在 “程序运行完后” 检查mem下是否有文件,就能判断是否有内存泄漏

 

除了内存泄漏问题,还可以检测 "double free" 问题,即释放野指针

 

两种方法:

1. 使用 #define malloc() _malloc()

2. 使用 hook

 

暂时看到这里(等下自己敲一遍代码看看)

 

 

 

 

 

  

 

posted @ 2022-09-21 18:46  yinhuachen  阅读(126)  评论(0编辑  收藏  举报