SetLength()如何在Delphi中分配内存

SetLength()如何在Delphi中分配内存,delphi,Delphi,以这种形式声明数组时,将静态分配内存: var Data: array[0..5] of integer; 我的问题是,数组何时以以下方式声明: var Data: array of integer; .... SetLength( Data, Length( Data ) + 1 ); 内存是静态分配还是动态分配 我认为内存是静态分配的,数组是在内存中复制的,但我不确定。您声明的类型,array of Integer,称为a。动态数组是通过调用SetLength来分配的,内存是动态

以这种形式声明数组时,将静态分配内存:

var
  Data: array[0..5] of integer;
我的问题是,数组何时以以下方式声明:

var
  Data: array of integer;
....
SetLength( Data, Length( Data ) + 1 );
内存是静态分配还是动态分配


我认为内存是静态分配的,数组是在内存中复制的,但我不确定。

您声明的类型,
array of Integer
,称为a。动态数组是通过调用SetLength来分配的,内存是动态的。

这是动态分配,原因有三:

  • 静态分配只能在编译时发生。一般来说,如果您正在使用一个过程或函数来执行此操作,那么它是从内存管理器分配的动态内存
  • 由于
    Length(Data)+1
    的值取决于仅在运行时已知的信息,因此不能静态分配
  • 静态的字面意思是“不变”,而动态的意思是“改变”。您的SetLength调用正在改变数组的大小,将其增加1。因此,在这里只能进行动态分配

  • 经验法则:当数组变量的大小在编译时已知时,该数组称为静态数组(它驻留),而在运行时称为动态数组。动态数组驻留在堆中。