检测内存泄露的原理
来源:互联网 发布:新手如何做淘宝客 编辑:程序博客网 时间:2024/05/18 00:09
检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的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++内存泄露检测原理
- lua内存泄露检测原理
- netty内存泄露检测原理
- Lua内存泄露检测原理
- 内存泄露的检测
- 内存泄露的检测
- [Lua]Lua内存泄露检测原理
- Netty内存泄露检测原理分析
- Android 内存泄露原理和检测
- 检测内存泄露的方法:
- C++ 内存泄露的检测
- C++ 内存泄露的检测
- 内存泄露的检测方法
- 检测内存泄露的工具
- 检测内存泄露的方法
- C++内存泄露的检测
- OpenCV内存泄露的检测
- [OS] 用户态和内核态的概念区别 [面试思科]
- JS简介 2
- 11g Active Data Guard 报表访问报 ora-01555
- JavaScript 使用
- ListView--------------自定义适配器
- 检测内存泄露的原理
- JS的输出
- ubuntu下安装Apache+PHP+Mysql
- mysql 储存过程
- JS语句
- JS注释
- ZOJ 2723 Semi-Prime(set容器使用)
- The Bronte Story——9、Arthur Nicholls
- 标准C++的类型转换:static_cast、dynamic_cast、reinterpret_cast、和const_cast