如何清空动态数组

问题描述

我需要多次重复使用动态数组,因为我认为它具有更好的性能。 因此,我不需要每次都需要创建新的动态数组。

我想问一下是否将同一数组用于多个指令,然后清除并重用它是否会导致错误和效率低下?以及如何纠正我的程序,因此它可能会满足我的需求。 我的代码

procedure Empty(local_array : array of Integer);
var
    i : Integer;

begin
    for i:= 0 to high(local_array) do 
        local_array[i]:= nil;
        Setlength(local_array,0);          
end;

解决方法

如果您想重复使用数组,请不要理会它的大小。更改数组的大小或更具体地增加数组的大小可能会导致需要重新分配数据。

什么是数组数据重新分配? 在Delphi中,所有阵列都需要存储在连续的内存块中。这意味着,如果您尝试增加阵列的大小,并且在当前分配给阵列的内存块之后已经有一些数据,则需要将整个阵列移到有足够空间来存储新阵列的另一个内存位置一个连续内存块的大小。

因此,不必调整数组大小,而只需保留其大小,而只需将数组项的值设置为某个默认值即可。是的,这意味着该阵列仍将占用其分配的内存。但这是重用此类数组的目的,因为这样可以避免为数组分配/取消分配内存的开销。

如果您采用这种方式,请不要忘记在数组中存储自己的已用项目计数,因为其长度可能大于实际使用的项目数。