Возник аналогичный вопрос.
Похоже есть ещё какое-то дополнительное сакральное знание...
Создаю в лазарусе (версия 1.2 для Win32, установка по умолчанию) новый проект (Простая программа):
- Код: Выделить всё
program heap;
var
a, b: pointer;
begin
getmem(a,100);
getmem(b,200);
freemem(b);
//freemem(a);
end.
Отмечаю галку -gh в параметрах проекта. -gl уже была по умолчанию, -Xs и -Xg не трогаю (по умолчанию и так выключены).Компилирую, получаю файл размером 86817 байт. Запускаю в командной строке. Он выводит
- Код: Выделить всё
Heap dump by heaptrc unit
2 memory blocks allocated : 300/304
1 memory blocks freed : 200/200
1 unfreed memory blocks : 100
True heap size : 131072 (128 used in System startup)
True free heap : 130768
Should be : 130776
Call trace for block $00096348 size 100
$00407DC1
$554C4C41
$53524553
$464F5250
$3D454C49
$445C3A43
$6D75636F
$73746E65
Пробовал то же самое собирать в командной строке `\lazarus\fpc\2.6.2\bin\i386-win32\ppc386.exe -gh -gl heap.lpr` - файл получается точно такой же.
Меня смущает то, что получаемый файл не зависит от наличия или отсутствия ключа "-Xs", то есть вероятно где-то ещё глобально эти символы отключены. Но от ключа -gl размер и адрес в строке "Call trace for block"зависит. При его отсутствии файл получается меньше (75369 байт) и первый адрес меняется на $000961E0.
Пробовал то же самое c версией 1.2 под Win64 - размер файла и адреса конечно другие, но суть та же. Подробной отладочной информации не выводит.