zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/findumars/p/5796959.html
Copyright © 2011-2022 走看看