Здавалка
Главная | Обратная связь

Распределение памяти при выполнении программы



Верхняя граница памяти

Свободная память HeapPtr
FrePtr
Область для динамических переменных (куча)

OvrHeapEnd
Она заполняется вверх от отметки

Занятая динами ческая память HeapOrg
Верхняя граница стека
OvrHeapOrg
вверх
Область памяти оверлеев (оверлейный буфер, если он необходим).

 
Sseg : Str
Стек, для хранения локальных переменных и параметров процедур и функций
Заполненая часть стека

Заполняется вниз
Sseg : 0000
Свободная часть стека

Сегмент данных
Глобальные переменные

Dseg : 0000
Типизированные константы.

Сегмент кода модуля System.
Если он есть в программе
Cодержимое регистров CS, DS, SS не изменяется в ходе программы! А SP-снижается вниз пока не достигнет конца!
Здесь содержится образ EXE файла
Сегмент кода первого модуля (Unit)

Cегмент кода других модулей.
Сегмент кода последнего модуля (Unit)
Cseg : 0000
Cегмент кода основной программы.

Стандартная переменная PrefixSeg = 0000 Начальный адрес программы  
Префикс сегмента программы (PSP) = 256 байт

Это файл анкета о загружаемой программе

 

 

После PSP (ProgramSegmentPrefix) располагаются коды EXE-файла – это может быть один сегмент = 64 кбайтам. Если программа разбита на модули, то каждому модулю соответствует свой сегмент кода программы. За СЕГМЕНТОМ КОДА ОСНОВНОЙ ПРОГРАММЫ располагаются сегменты в порядке, обратном тому, который указан при вызове в разделе USES.

Затем располагается СЕГМЕНТ КОДА МОДУЛЯ System. После следует СЕГМЕНТ ДАННЫХ – все константы, переменные (глобальные).

За СЕГМЕНТОМ ДАННЫХ следует СЕГМЕНТ СТЕКА.

Назначение сегмента стека:

1.при вызове процедур и функций он служит для передачи параметров;

2. здесь размещаются все локальные переменные на уровне процедур и функций;

3.здесь сохраняются все критические значения программы.

Чтобы узнать количество стековой памяти, требуемой программе, можно после компиляции, посмотреть это режиме Info.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.