- Код: Выделить всё
- 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 раз быстрее.. А тогда, вопрос, а какие такие особые фичи, ну кроме того что выход из программы удалит и все массивы, дают динамические массивы, если по скорости работы (используется стандартный менеджер памяти), они проигрывают...






 
  