如何清空动态数组
How To Empty a Dynamic Array
我需要多次重复使用动态数组,因为我认为它的性能更好。
因此,我不需要每次都创建一个新的动态数组。
我想问一下,如果我将同一个数组用于多个指令然后清除它并重新使用它是否会导致错误和效率低下?我怎样才能纠正我的程序,所以,它可能会满足我的需要。
我的代码:
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中,所有数组都需要存储在连续的内存块中。这意味着如果您试图增加数组的大小并且在当前分配给您的数组的内存块之后已经有一些数据,则整个数组需要移动到另一个内存位置,那里有足够的 space将新的数组大小存储在一个连续的内存块中。
因此,不要调整数组的大小,而不要管它的大小,只需将数组项的值设置为某个默认值。是的,这意味着这样的数组仍将占用其分配的内存。但这是重用此类数组的目标,因为您可以避免 allocating/deallocating 内存到数组的开销。
如果您这样做,请不要忘记在您的数组中存储您自己的已用项目数量,因为它的长度可能大于实际使用的项目数量。
我需要多次重复使用动态数组,因为我认为它的性能更好。 因此,我不需要每次都创建一个新的动态数组。
我想问一下,如果我将同一个数组用于多个指令然后清除它并重新使用它是否会导致错误和效率低下?我怎样才能纠正我的程序,所以,它可能会满足我的需要。 我的代码:
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中,所有数组都需要存储在连续的内存块中。这意味着如果您试图增加数组的大小并且在当前分配给您的数组的内存块之后已经有一些数据,则整个数组需要移动到另一个内存位置,那里有足够的 space将新的数组大小存储在一个连续的内存块中。
因此,不要调整数组的大小,而不要管它的大小,只需将数组项的值设置为某个默认值。是的,这意味着这样的数组仍将占用其分配的内存。但这是重用此类数组的目标,因为您可以避免 allocating/deallocating 内存到数组的开销。
如果您这样做,请不要忘记在您的数组中存储您自己的已用项目数量,因为它的长度可能大于实际使用的项目数量。