Что-то я не понимаю, почему для Byte и LongInt выделяется одно и тоже кол-во памяти ?
var
pByte : ^Byte;
pLong : ^LongInt;
mem1, mem2 : LongInt;
begin
mem1 := GetHeapStatus.TotalFree;
New(pByte);
mem2 := GetHeapStatus.TotalFree;
writeln('Для pByte выделено ', mem1 - mem2);
New(pLong);
mem1 := GetHeapStatus.TotalFree;
writeln('Для pLong выделено ', mem2 - mem1);
end.
Внимательно читаем файл prog.pdf (из документации на FPC):
Спасибо, так и думал что какая-то нормализация ... TP так-же выдает одинаковый результат - 8.
Теперь я окончательно ничего не опнимаю :
uses crt;
type
TArray = array of byte;
var
A : TArray;
begin
clrscr;
writeln('Before Init : ', GetHeapStatus.TotalFree);
SetLength(A, 100);
writeln('After Init : ', GetHeapStatus.TotalFree);
SetLength(A, 0);
writeln('After Free : ', GetHeapStatus.TotalFree);
readln;
end.
А теперь посмотри сюда:
uses crt;Чувствуешь? Если ты пытаешься обратиться к GetHeapStatus перед первым обращением к SetLength, то получаешь совсем не то, что получишь после первого SetLength... Скорее всего, для объяснения придется копать в сторону счетчика ссылок (reference count)...
type
TArray = array of byte;
var
A : TArray;
begin
SetLength(A, 10);
SetLength(A, 0);
clrscr;
writeln('Before Init : ', GetHeapStatus.TotalFree);
SetLength(A, 100);
writeln('After Init : ', GetHeapStatus.TotalFree);
SetLength(A, 0);
writeln('After Free : ', GetHeapStatus.TotalFree);
readln;
end.
Обалдеть ... Спасибо