delphi dispose释放内存的方法

delphi dispose释放内存的方法

2010-06-08 19:39:59| 分类: DELPHI 订阅

dispose使用方法的简单介绍在本文末尾。

定义一个record 类型,经过多次new dispose后,从windows任务管理器看,占用的内存比启动时大了很多,似乎越来越大

设置 ReportMemoryLeaksOnShutdown := true; 再运行,仍然没有提示 memory leak。

其实就是dispose 本身的原因。

delphi设计的 dispose 释放内存时,只是标记这部分内存可以再用来被 new 等函数分配,并不是把从系统申请到的内存归还给操作系统,只在程序结束时,才全部释放给操作系统。

比如 new 申请 15 个记录(sizeof=64字节) 的空间,然后 dispose 释放。再使用 new 申请 10个,此时这 10 个就不再请求系统了,直接从刚才的 15个 (此时已经空闲) 中分10 个出来。只有在占用的空闲内存不够使用时,才请求操作系统分配内存(剩余部分)。

若前一次15个空间地址如左列,释放后,下一次10个空间的地址如右列,即从前次分配的最后一个地址开始,按前次的顺序,倒过来分配10个。

00F23860

00F23818

00F237D0

00F23788

00F23740

00F236F8

00F236B0

00F23668

00F23620

00F235D8

00F23590

00F23548

00F23500

00F234B8

00F23470

00F23470

00F234B8

00F23500

00F23548

00F23590

00F235D8

00F23620

00F23668

00F236B0

00F236F8

若不希望在运行期间占用内存越来越大,除了使用new / dispose 外,应该使用些什么呢,待续

简单介绍一下: 若有如下类型定义,可以使用new申请空间,并在使用完后使用dispose释放。

Type

 PMyRec = ^TMyRec;

 TMyRec = record

  FName: string;

  LName: string;

 end;

var

 MyRecPtr: PMyRec;

 TreeViewIndex: LongInt;

begin

 New(MyRecPtr);

 MyRecPtr^.FName := Edit1.Text;

 MyRecPtr^.LName := Edit2.Text;

 {其他处理}

 Dispose(MyRecPtr);

end;

http://blog.csdn.net/luo809976897/article/details/20134007