- Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Classes,
SysUtils { you can add units after this };
var
Ar: array of byte;
P: PByteArray;
i,t : longint;
begin
t := GetTickCount64;
for i := 0 to 100000 do
begin
SetLength(Ar, 1000000);
Ar[100] := 100;
SetLength(Ar, 500);
if Ar[100] <> 100 then writeln('error:SetLength');
Ar[9] := 9;
SetLength(Ar, 0);
end;
writeln(GetTickCount64 - t);
t := GetTickCount64;
for i := 0 to 100000 do
begin
GetMem(P, 1000000);
(P^)[100] := 100;
ReallocMem(P, 500);
if (P^)[100] <> 100 then writeln('error:ReallocMem');
(P^)[9] := 9;
FreeMem(P);
end;
writeln(GetTickCount64 - t);
readln;
end.
Результат работы:
5187
16
то есть второй вариант более чем в 100 раз быстрее.. А тогда, вопрос, а какие такие особые фичи, ну кроме того что выход из программы удалит и все массивы, дают динамические массивы, если по скорости работы (используется стандартный менеджер памяти), они проигрывают...