• System.GetMem、System.FreeMem 申请和释放内存


    如果只为单个指针分配内存, 和 New 和 Dispose 是一样的; 与之不同的是: GetMem 可以申请连续的多个内存块.

    举例:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    implementation
    
    {$R *.dfm}
    
    Type
      TMyRec = record     {定义结构}
        name: string[8];
        age : Word;
      end;
      PMyRec = ^TMyRec;   {定义结构指针}
    
    var
      pr: PMyRec;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      {同时分配 3 个结构的内存; 此时的三个结构在内存中是连续的}
      GetMem(pr, SizeOf(TMyRec) * 3);
    
      {此时 pr 指向第一个结构, 赋值}
      pr.name := '张三';
      pr.age := 11;
    
      {让 pr 指向第二个结构, 赋值}
      Inc(pr);
      pr.name := '李四';
      pr.age := 22;
    
      {让 pr 指向第三个结构, 赋值}
      Inc(pr);
      pr.name := '王五';
      pr.age := 33;
    
      {先回到第一个结构, 然后依次读取}
      Dec(pr, 2);
      ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {张三 11 岁}
      Inc(pr);
      ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {李四 22 岁}
      Inc(pr);
      ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {王五 33 岁}
    
      {从第一个结构, 清除 3 个结构大小的内存, 这样就删除了上面三个结构}
      Dec(pr, 2);
      FreeMem(pr, SizeOf(pr^) * 3); {SizeOf(TMyRec)  和 SizeOf(pr^) 是一样的}
    end;
    
    end.
    
    System 单元下的公用函数目录

  • 相关阅读:
    【BZOJ 2440】[中山市选2011]完全平方数
    【BZOJ 1066】[SCOI2007]蜥蜴
    luogu P1317 低洼地
    luogu P1379 八数码难题
    luogu P1886 滑动窗口
    luogu P1032 字串变换
    题解 P1876 【开灯】
    题解 P1720 【月落乌啼算钱】
    题解 P2863 【[USACO06JAN]牛的舞会The Cow Prom】
    关于线性回归
  • 原文地址:https://www.cnblogs.com/del/p/1125778.html
Copyright © 2020-2023  润新知