TURBO PASCAL |
Новости
|
Администратор динамически распределяемой области памяти 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. При выделении маленького блока администратор выделяет более круп- ный блок памяти, а затем разбивает его (вторично распределяет) по требованию на более мелкие блоки. Перед тем, как администратор памяти выделяет новый блок глобальной памяти, который, в свою очередь, будет распределяться повторно, при распределении малень- ких блоков повторно используется все доступное пространство вто- ричного распределения. Примечание: Об использовании администратора памяти в DLL подробнее рассказывается в Главе 11 "Динамически компо- нуемые библиотеки". B.Pascal 7 & Objects/LR - 363 - Переменная HeapLimit определяет порог между маленькими и большими блоками динамически распределяемой памяти. По умолчанию ее значение равно 1024 байтам. Переменная HeapBlock определяет размер, используемый администратором памяти при распределении блоков, выделенных для вторичного распределения. По умолчанию значение HeapBlock равно 8192 байтам. Значения этих переменных изменять не следует, но если вы это сделаете, убедитесь, что зна- чение HeapBlock составляет не меньше четырехкратного размера HeapLimit. Переменная HeapAllocFpals определяет значение флагов атрибу- тов, передаваемых GlobalAlloc, когда администратор памяти распре- деляет блоки глобальной памяти. По умолчанию ее значение равно gmem_Moveable. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |