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

  • 相关阅读:
    leetcode 1036. 逃离大迷宫(bfs)
    leetcode 1040. 移动石子直到连续 II(滑动窗口)
    leetcode 1039. 多边形三角剖分的最低得分(区间dp)
    Han Xin and His Troops(扩展中国剩余定理 Python版)
    CCPC 2019 网络赛 HDU huntian oy (杜教筛)
    多项式模板
    树链剖分(模板) 洛谷P3384
    2019牛客暑期多校训练营(第九场)
    CF #575 Div3
    计算几何模板集
  • 原文地址:https://www.cnblogs.com/findumars/p/5796959.html
Copyright © 2011-2022 走看看