delphi 内存泄漏及其后果是什么?  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 内存泄漏及其后果是什么?


一个内存泄漏时,您的应用程序分配内存空间,并永远不会再释放它发生。


Delphi 中的内存泄漏是如何发生的

在 Delphi 应用程序中,内存空间一直在分配和释放。这通常由编译器或 RTL 自动完成——例如,在分配原始类型的变量、传递给函数的参数等时——我们通常不必担心它。


但是,有很多情况是我们手动分配内存的。实例化一个对象就是其中之一:


Obj: = TMyObject.Create;

上面的代码将分配一个内存空间,Obj 变量将指向分配的内存空间的地址。要释放它,您可以使用 Free 方法:


Obj.Free;

如果开发人员忘记调用 Free 方法,则永远不会释放与该对象关联的内存空间。我们有内存泄漏。


内存泄漏的后果

您可能想知道:“有什么问题?我在我的应用程序中看到过这种情况,而且我从未遇到过任何实际问题!”


实际上,当只有少量内存泄漏时,我们通常不会看到问题,其后果还取决于应用程序的类型:


客户端应用程序(桌面或移动)

一般来说,在桌面或移动应用程序中,后果不是很严重。在目前的操作系统中,应用程序分配的内存一般在应用程序终止时释放,以免造成系统不稳定。


即便如此,如果您的应用程序产生大量内存泄漏,则可能会出现一些问题,由内存使用过多引起:


应用程序和/或系统缓慢:可能需要访问磁盘来解决内存不足问题。


应用程序突然关闭:由于内存使用过多,操作系统可能会强制终止应用程序。这在移动应用程序中更为常见。


应用程序错误:分配内存的应用程序代码可能会开始崩溃并导致错误。


服务器应用程序

在谈论服务器应用程序时,问题变得更糟。那是因为理想情况下,您永远不会关闭服务器——您希望它“永远”运行而无需重新启动它。


其后果与桌面应用程序的后果几乎相同,但由于服务器应用程序理论上永远不应关闭,因此任何小的内存泄漏都会在未来产生后果。内存将在数天、数周、数月内缓慢消耗,您的服务器性能将下降,会出现错误,最终服务器将停止工作。


避免内存泄漏

有一些技术和工具可以帮助您检测和消除应用程序中的内存泄漏。这将在以后的帖子中介绍。


那你呢?您的应用程序中是否遇到过由内存泄漏引起的问题?与代码中需要担心的其他更重要的事情相比,您是否认为检测和消除内存泄漏是一项低优先级的任务?



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.047528982162476 seconds