Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84513
  • 博文数量: 18
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 09:54
文章分类
文章存档

2008年(18)

我的朋友

分类:

2008-10-16 16:08:20



·简介................................................

       在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后, 由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程 序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,即使严格意义上来说这是不准确的。
       一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。 应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存 块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。


·后果...............................................

       内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。
       内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
       在以下情况,内存泄漏导致较严重      后果:
       * 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理);
       * 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时;
       * 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候;
       * 泄漏在操作系统内部发生;
       * 泄漏在系统关键驱动中发生;
       * 内存非常有限,比如在嵌入式系统或便携设备中;
       * 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。

阅读(1456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~