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

时间:2014-01-30 15:45:36

标签: delphi

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

var
  Data: array[0..5] of integer;

我的问题是以下列方式声明数组:

var
  Data: array of integer;
....
SetLength( Data, Length( Data ) + 1 );

是静态还是动态分配内存?

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

2 个答案:

答案 0 :(得分:5)

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

  1. 静态分配只能 在编译时发生。作为一般规则,如果您正在使用过程或函数来执行此操作,则会从内存管理器中分配动态内存。
  2. 由于Length( Data ) + 1的值取决于仅在运行时已知的信息,因此无法静态分配。
  3. 静态字面意思是“不变”,动态意味着“改变”。您的SetLength调用正在更改数组的大小,将其增加1.因此,它只能在此处进行动态分配。

答案 1 :(得分:2)

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