APP下载

编程实践中内存泄漏的检测与处理

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查看全文

猜你喜欢

调试分配程序
应答器THR和TFFR分配及SIL等级探讨
遗产的分配
试论我国未决羁押程序的立法完善
一种分配十分不均的财富
绩效考核分配的实践与思考
基于航拍无人机的设计与调试
FOCAS功能在机床调试中的开发与应用
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
无线通信中频线路窄带临界调试法及其应用