これは、メモリ割り当てをチェックする簡単なプログラムです。タスク マネージャーで前後の値を確認すると、各動的配列がサイズ = 1 で 20 バイトのメモリを占有することが示唆されます。要素のサイズは 4 であり、これはブックキーピング データの 16 バイトのオーバーヘッドを意味します。
system.pas を調べると、-4 バイトの配列長フィールドと -8 バイトの参照カウントを見つけることができますが、他の 8 への参照を見つけることができないようです。
サンプルプログラム:
program Project1;
{$APPTYPE CONSOLE}
type
TDynArray = array of integer;
TLotsOfArrays = array[1..1000000] of TDynArray;
PLotsOfArrays = ^TLotsOfArrays;
procedure allocateArrays;
var
arrays: PLotsOfArrays;
i: integer;
begin
new(arrays);
for I := 1 to 1000000 do
setLength(arrays^[i], 1);
end;
begin
readln;
allocateArrays;
readln;
end.