Advertisement

内存泄漏排查组件

阅读量:

内存泄漏

内存泄漏的主要原因是调用内存分配与释放时未能遵循开闭原则。存在未被释放的内存块会导致系统可用内存逐渐减少直至归于零。

一个内存泄漏检测系统需要能够准确识别内存泄漏是由代码中的哪些行导致的

可以利用一些现有的工具来进行内存泄漏的排查工作。例如valgrindmtrace和ASAN等都是不错的选择。然而这些工具通常不具备在生成环境中实时检测内存泄漏的能力它们主要用于在内存泄漏被发现后进行测试分析。特别地是valgrind和ASAN对系统的性能有一定的影响并且也不适合应用于嵌入式系统环境

现在,我们是否可以自行开发一些小型工具来监控或跟踪malloc和free函数的行为,并在需要时直观地检查是否存在内存泄漏问题呢

跟踪malloc和free

在内存泄漏检测中最基本的方法就是对malloc函数及其相关函数的使用情况进行跟踪记录。每当malloc函数生成一个内存块时(即返回一个有效地址),就需要为这个地址生成一条记录;而每当free函数被调用以释放某个内存块时,则需要撤销相应的记录条目。当程序完成正常退出后(不再执行任何可能导致内存泄漏的操作),仍然存在的这些记录信息就能够清晰地指示出内存泄漏的位置和具体原因了。

最开始想到的就是给内存管理函数做钩子绑定。然而,在内存泄漏检测组件中采用的方式并非如此直接:它通过dlsym进行钩子绑定以实现对malloc和f

全部评论 (0)

还没有任何评论哟~