怎么检测内存泄露
2013-04-09 11:17
295 查看
检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。这里只是简单的描述了检测内存泄漏的基本原理,详细的算法可以参见SteveMaguire的<<WritingSolidCode>>。如果要检测堆内存的泄漏,那么需要截获住malloc/realloc/free和new/delete就可以了(其实new/delete最终也是用malloc/free的,所以只要截获前面一组即可)。对于其他的泄漏,可以采用类似的方法,截获住相应的分配和释放函数。比如,要检测BSTR的泄漏,就需要截获SysAllocString/SysFreeString;要检测HMENU的泄漏,就需要截获CreateMenu/DestroyMenu。(有的资源的分配函数有多个,释放函数只有一个,比如,SysAllocStringLen也可以用来分配BSTR,这时就需要截获多个分配函数)在Windows平台下,检测内存泄漏的工具常用的一般有三种,MSC-RuntimeLibrary内建的检测功能;外挂式的检测工具,诸如,Purify,BoundsChecker等;利用WindowsNT自带的PerformanceMonitor。这三种工具各有优缺点,MSC-RuntimeLibrary虽然功能上较之外挂式的工具要弱,但是它是免费的;PerformanceMonitor虽然无法标示出发生问题的代码,但是它能检测出隐式的内存泄漏的存在,这是其他两类工具无能为力的地方。
相关文章推荐
- vs2008下的MFC程序,怎么检测内存泄露
- C++内存管理之一(检测内存泄露)
- 使用xcode4.2检测内存泄露leak的具体位置的两种方法总结
- C/C++中检测内存泄露的方法
- 怎样检测内存泄露
- valgrind 内存泄露检测
- MFC内存泄露检测
- 使用的Instruments检测解决iOS内存泄露
- Android Studio检测内存泄露和性能
- 一种基于libgds的简单内存泄露的检测方法
- 大家用什么工具检测内存泄露
- 检测内存泄露的工具:debugnew
- MFC内存泄露与检测
- VC 检测内存泄露的几种方法
- linux 下内存泄露检测工具介绍
- VC++中检测内存泄露
- valgrind检测linux程序内存泄露
- 内存泄露检测工具 Visual Leak Detector for Visual C++ 2008/2010
- 使用新版Android Studio检测内存泄露和性能
- vs2010使用vld检测内存泄露