2016 - 2024

感恩一路有你

内存泄漏和内存溢出 如何检测C 的内存泄漏,用哪些工具?

浏览量:2031 时间:2021-03-21 01:34:27 作者:admin

如何检测C 的内存泄漏,用哪些工具?

你好,我很高兴为你回答。

如何检测内存泄漏:

检测内存泄漏的关键是拦截对分配内存和释放内存的函数的调用。通过截取这两个函数,我们可以跟踪每个内存块的生命周期。例如,每次成功分配内存块时,其指针都会添加到全局列表中;每次释放内存块时,其指针都会从列表中删除。这样,当程序结束时,列表中剩余的指针指向尚未释放的内存。这只是对内存泄漏检测基本原理的简单描述。有关详细算法,请参阅Steve Maguire的>。

如果要检测堆内存泄漏,需要截获malloc/realloc/free和new/delete(事实上,malloc/free也用于new/delete,所以只需要截获上一个组)。对于其他泄漏,可以使用类似的方法拦截相应的分配和释放函数。例如,要检测BSTR的泄漏,需要截获sysallocstring/sysfiresting;要检测hmnu的泄漏,需要截获createmenu/destroymenu。(有些资源有多个分配功能,只有一个释放功能。例如,sysallocstringlen也可以用来分配BSTR。在这种情况下,需要截获多个分配函数)

在windows平台上,有三种常用的检测内存泄漏的工具:MSc runtimelibrary内置检测函数;插件检测工具,如purify、boundschecker等;使用windowsnt的性能监视器。这三种工具各有优缺点。虽然MSc运行库在功能上比插件工具弱,但它是免费的。虽然性能监视器不能识别出有问题的代码,但是它能够检测出隐式内存泄漏的存在,这是其他两种工具所无法检测的。

内存泄漏和内存溢出 ios内存溢出怎么解决 iOS开发 内存泄漏问题

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。