编程实践中内存泄漏的检测与处理
2012-06-21文丨朴艳丽
中国传媒科技 2012年24期
文丨朴艳丽 张 楠
C++的强大功能之一就是可以进行动态内存分配,即允许在程序运行的过程中灵活分配所需的内存,然而,有效地管理这些内存同样也是非常重要的。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。
1 内存泄露的定义
一般我们常说的内存泄露指的是堆内存的泄露。应用程序一般以malloc,new,relloc,等从内存中分配的内存空间,使用完成后程序必须负责free或者delete掉这部分内存空间,否则这块内存就不能被再次使用就是我们通常说的内存泄露。此外,内存泄露还包括系统资源的泄露。比如HANDLE,GDI Object,Socket,interface等,有些对象消耗的是核心态的内存,因此,从某种角度上说,系统资源的泄露比堆内存泄露更加恐怖,可能导致操作系统的不稳定。GDI object泄露是一种常见的资源泄露。
2 内存泄露的分类
以发生的方式来说,内存泄露大致分为以下几种:(1)常发性内存泄露,发生内存泄露的代码会被经常执行到,每次执行都会导致内存泄露。(2)偶发性内存泄露,发生内存泄露的代码只有在特定的环境下才会被执行到,因此,在特定的环境下偶发内存泄露可能会变成常发性内存泄露,检测内存泄露变得至关重要。(3)一次性内存泄露,发生内存泄露的代码只会被执行一次。(4)隐式内存泄露。程序在运行过程中不停的分配内存,但是直到结束后才释放内存,从严格的角度来说这里并没有内存泄露,因为程序最终释放了所有的申请资源,但是不及时的释放内存也有可能造成内存泄露。……
登录APP查看全文
