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

Joh*_*gon 4 delphi

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

var
  Data: array[0..5] of integer;
Run Code Online (Sandbox Code Playgroud)

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

var
  Data: array of integer;
....
SetLength( Data, Length( Data ) + 1 );
Run Code Online (Sandbox Code Playgroud)

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

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

Mas*_*ler 5

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

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