Вот простая программа для проверки распределения памяти. Проверка значений до и после с помощью диспетчера задач показывает, что каждый динамический массив занимает 20 байт памяти при размере = 1. Размер элемента равен 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.