检测内存泄漏的关键
来源:互联网 发布:淘宝买了假货怎么索赔 编辑:程序博客网 时间:2024/05/16 03:27
http://blog.csdn.net/windows_nt/article/details/8652133
检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。这里只是简单的描述了检测内存泄漏的基本原理,详细的算法可以参见Steve Maguire的<<Writing Solid Code>>。
如果要检测堆内存的泄漏,那么需要截获住malloc/realloc/free和new/delete就可以了(其实new/delete最终也是用malloc/free的,所以只要截获前面一组即可)。对于其他的泄漏,可以采用类似的方法,截获住相应的分配和释放函数。比如,要检测BSTR的泄漏,就需要截获SysAllocString/SysFreeString;要检测HMENU的泄漏,就需要截获CreateMenu/ DestroyMenu。(有的资源的分配函数有多个,释放函数只有一个,比如,SysAllocStringLen也可以用来分配BSTR,这时就需要截获多个分配函数)。
在Windows平台下,检测内存泄漏的工具常用的一般有三种,MS C-Runtime Library内建的检测功能;外挂式的检测工具,诸如,Purify,BoundsChecker等;利用Windows NT自带的Performance Monitor。这三种工具各有优缺点,MS C-Runtime Library虽然功能上较之外挂式的工具要弱,但是它是免费的;Performance Monitor虽然无法标示出发生问题的代码,但是它能检测出隐式的内存泄漏的存在,这是其他两类工具无能为力的地方。
- 检测内存泄漏的关键
- 内存泄漏的检测
- 内存泄漏的检测
- 关于内存泄漏的检测
- 检测内存泄漏的方法
- C++内存泄漏的检测
- 检测C++的内存泄漏
- 检测C++的内存泄漏
- C++内存泄漏的检测
- 检测内存泄漏的办法
- C++内存泄漏的检测
- C++内存泄漏的检测
- C++内存泄漏的检测
- 内存泄漏的检测;leakCanary
- 检测所有的内存泄漏!
- 数据库的内存泄漏检测
- 检测delphi的程序的内存泄漏
- 检测delphi的程序的内存泄漏
- Java基础----this、super及其异同
- HDU_2068 RPG的错排(错排+组合数)
- nodejs使用connect-mongodb报错(Please ensure that you set the default write concern)
- 【翻译自mos文章】CRS显示 正在运行的db instance 是offline状态
- 平衡二叉查找树
- 检测内存泄漏的关键
- Github上优秀的Objective-C项目简介
- 硬盘的原理以及SQL Server如何利用硬盘原理减少IO
- oracle设定用户密码使用时间
- Objective-C ---KVO内部实现原理
- 51单片机学习笔记【一】——LED灯实验
- Java使用手机发送短信程序
- 图像扩展函数cvCopyMakeBorder的使用
- Mybatis问题