Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
55
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Изменение атрибутов

Используемые по умолчанию атрибуты сегмента кода - это атри-

буты MOVEABLE, DEMANDLOAD и DISCARDABLE. Но с помощью директивы

компилятора $C вы можете задать другие используемые по умолчанию

атрибуты, например:

{$C MOVEABLE PRELOAD PERMANENT}

В прикладной программе защищенного режима DOS нет необходи-

мости в администраторе оверлеев. Администратор памяти DOS защи-

щенного режима включает в себя полный набор средств управления

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

Описываемые ниже средства доступны для любой программы защищенно-

го режима DOS.

Примечание: Подробности о директиве компилятора $C

можно найти в Главе 2 ("Директивы компилятора") в "Справоч-

ном руководстве программиста".

Администратор динамически распределяемой области памяти 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 "Динамически компо-

нуемые библиотеки".

Переменная HeapLimit определяет порог между маленькими и

большими блоками динамически распределяемой памяти. По умолчанию

ее значение равно 1024 байтам. Переменная HeapBlock определяет

размер, используемый администратором памяти при распределении

блоков, выделенных для вторичного распределения. По умолчанию

значение HeapBlock равно 8192 байтам. Значения этих переменных

изменять не следует, но если вы это сделаете, убедитесь, что зна-

чение HeapBlock составляет не меньше четырехкратного размера

HeapLimit.

Переменная HeapAllocFpals определяет значение флагов атрибу-

тов, передаваемых GlobalAlloc, когда администратор памяти распре-

деляет блоки глобальной памяти. По умолчанию ее значение равно

gmem_Moveable.

Соседние файлы в предмете Программирование на Pascal