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


Администратор динамически распределяемой области памяти DOS


Расширения Borland защищенного режима DOS включают в себя полный администратор памяти защищенного режима. При выполнении программы защищенного режима DOS вся доступная память превращает- ся в глобальную динамически распределяемую область памяти, кото- рая управляется администратором памяти (подсистемой управления памятью) защищенного режима. Прикладная программа может получить доступ к глобальной динамически распределяемой области памяти че- рез подпрограммы GlobalXXXX модуля WinAPI. Хотя можно распреде- лять блоки глобальной памяти любого размера, глобальная динами- чески распределяемая область памяти предназначена только для больших блоков (1024 байт или более). Для каждого блока глобаль- ной памяти требуется дополнительно 32 байта (это непроизводитель- ные затраты), а общее число блоков глобальной памяти не может превышать 8192.

Примечание: Подробнее расширения Borland защищенного режима DOS описываются в Главе 17 "Программирование в защи- щенном режиме DOS".

Borland Pascal включает в себя администратор памяти (который называют также подсистемой управления памятью), реализующий стан- дартные процедуры New, Dispose, GetMem и FreeMem. Администратор памяти использует для всех распределений памяти глобальную дина- мически распределяемую область. Поскольку глобальная динамически распределяемая область памяти ограничена 8192 блоками (что оче- видно меньше, чем может потребоваться для некоторых прикладных программ), администратор памяти Borland Pascal реализует алгоритм вторичного распределения сегментов, который улучшает производи- тельность и допускает распределение существенно большего коли- чества блоков.

Примечание: Borland Pascal для расширенного режима DOS не поддерживает схему распределения с помощью процедур MArk и Release, предусмотренную для реального режима DOS.

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




- Начало -  - Назад -  - Вперед -