[杂谈]内存泄露的前生今世

1、什么是内存泄露,内存泄露有什么危害?

内存泄露是指程序中申请了内存使用后,没有正确释放(如 new[] 分配的内存,用 delete 释放)或者根本就忘了释放,从而在程序运行过程中一直占用着内存空间的问题。

内存泄露本身没什么特别大的危害(鬼才信~~~),唯一的问题是:这块内存区域被占着地方不放,没法拿来干别的用了。

好吧,一块两块的内存泄露,可能不会造成什么问题,但世界上凡事就怕形成规模,当你的内存泄露的数量足够多,就可能将你系统中可用的内存给全部占完,当你真正需要内存空间时,你会发现没地方了!然后你的程序怎么办?反正我不知道该怎么办,所以程序崩溃估计是唯一的结局了。

2、我程序关闭时,是否需要关心内存泄露?

实际上,在现代的操作系统中,每个进程之间是相互隔离的。所以,你程序一旦退出或死掉,它所占用的内存和资源就会被操作系统给收回。所以,程序关闭时,理论上如果你没有一些正在进行的IO操作,你可以用TerminateProcess 为类的函数强行中止,但安全点还是要通过正常的途径释放它们。

就象前面说了,内存泄露的核心点在于程序运行过程中,占着茅坑不拉屎,别人只能强憋着。但我们试图检测内存泄露时,如果在程序运行过程中,我们很难判定一块内存是否不在使用了(JAVA等解释型语言除外,它们可以通过引用计数等方式来自动管理),所以大家看到的报告工具都是在程序退出时,来检查谁没有被释放。

3、内存泄露不是病,发作起来真要命

内存泄露的问题,它的严重性在于影响程序的长时间运行,而且由于造成系统的可用内存越来越小,影响整个系统的流畅度。严重点的话,会被操作系统直接革掉小命。所以,我们在实际编码时,要尽量做到用完就释放,养成良好的编码习惯,否则~~~~

分享到: