Руководство по языку B.Pascal 7




Использование памяти программами реального режима DOS - часть 2


Рис. 21.1 Схема памяти для программы реального режима DOS.

Сегмент данных (адресуемый через регистр DS) содержит все типизированные константы, за которыми следуют все глобальные пе- ременные. В процессе выполнения программы регистр DS никогда не изменяется. Размер сегмента данных не может превышать 64К.

При входе в программу регистр сегмента стека (SS) и указа- тель стека (SР) загружаются так, что пара регистров SS:SР указы- вает на первый байт, следующий за сегментом стека. Регистр SS в процессе выполнения программы никогда не изменяется, а SP может перемещаться вниз, пока не достигнет нижней границы сегмента. Размер сегмента стека не может превышать 64К. По умолчанию ему назначается размер, равный 16К, но с помощью директивы компилято- ра $М это значение можно изменить.

Оверлейный буфер используется стандартным модулем Overlay для хранения оверлейного кода. По умолчанию размер оверлейного буфера соответствует размеру наибольшего оверлея в программе. Ес- ли программа не имеет оверлеев, то размер оверлейного буфера бу- дет нулевым. Размер оверлейного буфера можно увеличить с помощью вызова подпрограммы OvrSetBuf модуля Overlay. В этом случае раз- мер динамически распределяемой области памяти соответственно уменьшается, а HeapOrg перемещается вверх.

В динамически распределяемой области сохраняются динамичес- кие переменные, то есть переменные, выделенные при обращениях к стандартным процедурам New и GetMem. Она занимает всю свободную память или часть свободной памяти, оставшуюся при выполнении программы. Действительный размер динамически распределяемой об- ласти зависит от максимального и минимального значений, которые можно установить для динамически распределяемой области с помощью директивы компилятора $М. Гарантированный минимальный размер ди- намически распределяемой области не может быть меньше минимально- го значения, установленного для этой области. По умолчанию мини- мальные размер динамически распределяемой области равен 0 байт, а максимальный - 640К; это означает, что по умолчанию динамически распределяемая область занимает всю доступную память.

Подсистема динамического распределения памяти (являющаяся частью библиотеки исполняющей системы), как можно догадаться, уп- равляет динамически распределяемой областью. Детально она описы- вается в следующем разделе.




Содержание  Назад  Вперед