内存泄漏检测工具总结
视频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
暂时看到这里(等下自己敲一遍代码看看)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?