Особенности выделения памяти при интерпретации

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
toper
Сообщения: 2
Зарегистрирован: 30 июн 2009, 19:53

Windows XP
В среде Borland Delphi 7 отключена оптимизация при генерации кода. Создано консольное приложение. Написана примитивная абстрактная программа

Код: Выделить всё

program Project1;
type
   a = array[1..2] of integer;
   b = array[1..10] of a;
var
   aa:a;
   bb:b;
   c, d, e, f:integer;
begin
   c := 5+3;
   c := c+4;
   d := c*3;
   aa[1] := 1;
   bb[1][2] := c;
   if (aa[1] < bb[1][2]) then
   begin
      aa[1] := aa[1] + 2;
      aa[2] := aa[1] - d;
      f := 6;
   end
   else
   begin
      bb[1][2] := d;
      f := 7;
   end;
   bb[5][2] := 5;
end.
На строке begin поставлена точка останова и запущено окно дебага процессора. Результат - на вложении.
Необходимо понять как конкретно выделяется память под переменные и, в частности, например, где лежит переменная С и какой у нее адрес (в листинге, например, строка: mov [c], $00000008)

Прошу помощи у знающих людей
Вложения
ass.zip
(91.75 КБ) 20 скачиваний
airyashov
Сообщения: 441
Зарегистрирован: 02 ноя 2007, 10:31

учимся работать отладчиком
Вложения
test.jpg
test.jpg (92.3 КБ) 86 просмотров
icq:3(один)7748666
mail:airyashov( а)inbox.ru
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Судя по листингу, адрес переменной С = 4373Ch (взято из опкода команды). Как таковая, память для глобальных переменных не выделяется, они находятся с самого начала непосредственно в ЕХЕ файле и загружаются в память вместе с образом исполняемого кода. Исключение составляют большие массивы, динамические массивы и объекты. Начальный адрес этого образа задается опциями проекта и обычно составляет 40000h. Таким образом глобальные переменные могут быть проинициализированы и их значения попадут непосредственно в ЕХЕ при компиляции. Локальные переменные в процедурах и функциях находится в кадрах стека, поэтому их начальная инициализация невозможна (хотя могли бы сделать такую возможность, но она избыточна)
It's a long way to the top if you wanna rock'n'roll
toper
Сообщения: 2
Зарегистрирован: 30 июн 2009, 19:53

Большое спасибо за ответы.
Тему можно закрыть
Ответить