TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

9.2.1. Управление памятью

В описании процедур и функцийг связанных с управлением памятью, используется понятие «дескриптор» (ему соответствует тип THandIe). Для защищенного режима дескриптор совпадает с селектором, для Windows это не так.

Функция GetFreeSpace. Заголовок:

Function GetFreeSpace(Flags: Word): Longint;

Возвращает размер свободной памяти в байтах. Параметр Flags игнорируется и может быть любым.

функция GlobalAlloc. Заголовок:

Function GlobalAlloc(Flags: Word; Bytes: Longint): THandle;

Резервирует в памяти блок нужного размера Bytes и возвращает его дескриптор или 0, если нет памяти. Параметр Flags указывает тип блока и задается комбинацией следующих флагов:

 

Флаг

Смысл

gHND

Комбинация флагов gmemMovcable и gmemZeroInit.

gmem DDEShare

Определяет разделяемую память. Используется в операциях динами —

 

ческого обмена данными DDE и эквивалентен gmemShared.

gmem Discardable

Определяет выгружаемый на диск блок. Этот флаг не может комби —

 

нироваться с gmemMoveable.

gmem Fixed

Определяет фиксированный блок. Этот флаг не может комбинироваться


 

 

с gmemMoveable.

gmem Lower

Этот флаг игнорируется.

gmem Moveable

Опреде.1яет перемещаемый блок.

gmemNoCompact

Этот блок не выгружается и не участвует в реструктуризации памяти

 

выполняемой функцией GlobalCompact.

gmem NoDiscard

Определяет невыгружаемый блок.

gmem Notify

Требует оповещения программы при выгрузке блока на диск.

gmem Share

Определяет блок, который будет использоваться несколькими про —

 

граммами.

gmem Zerolnit

Этот блок при распределении в памяти заполняется нулями.

gPTR

Комбинация флагов gmeniFixed и gmemZeroInit


Функция GlobalAllocPtr . Заголовок:

Function GlobalAllocPtr(Flags: Word; Bytes: Longint): Pointer;

Резервирует блок памяти и возвращает указатель на него. Эквивалент вызовов GlobalAlloc и ClobalLock.

функция GlobalCompact. Заголовок:

Function GlobalCompact(MinFree: Longint): Longint;

Реструктурирует память так, чтобы обеспечить не менее MinFree байт свободного непрерывного пространства (если это возможно), и возвращает наибольшее непрерывное пространство в байтах. Если MinFree=0, функция не выгружает блоки на диск и возвращает размер непрерывной области, которая получится в результате выгрузки. Во всех случаях функция вначале перемещает блоки с флагом gmem_Moveable. Если после этого нет MinFreeoO байт непрерывного пространства, она выгружает блоки с флагом gmem_Discardable.

Функция Global Pis card. Заголовок:

Function Global-Discard (Mem: THandle) : THandle;

Выгружает на диск блок памяти, связанный с дескриптором Мет, и возвращает дескриптор блока, если операция прошла успешно, или NIL, если закончилась неудачей.

Функция GlobalDosAlloc. Заголовок:

Function GlobalDosAlloc(Size: Longint): Longint;

Распределяет память размером Size байт в первом мегабайте памяти. Возвращаемое значение содержит сегмент в старшем слове и селектор в младшем. Программа может использовать сегмент для доступа к памяти в реальном режиме и селектор — в защищенном. Если расширитель ДОС не может выделить память, функция возвращает 0.

Функция GlobalDosFree . Заголовок:

Function GlobalDosFree(Selector: Word): Word;

Освобождает память, выделенную с помощью GIobalDosAlloc. Selector — селектор блока памяти. Возвращает селектор блока, если операция прошла успешно, или 0, если неудачно.

Процедура GlobalFix. Заголовок:

Procedure GlobalFix(Mem: THandle);

Делает блок, связанный с дескриптором Мет, неперемещаемым. фиксированные блоки препятствуют эффективной работе менеджера памяти, поэтому следует разблокировать блок с помощью GIobaIUnFix сразу, как только это станет возможным.

Функция GlobalFlaqs. Заголовок:

Function GlobalFlags(Mem: THandle): Word;

Возвращает информацию о блоке, связанном с дескриптором Мет:

флаги памяти в старшем байте и счетчик блокировок — в младшем. Для тестирования флагов следует использовать маски из флагов gmem_Shared, gmem_Discard и gmem_Discarded (последний флаг означает, что блок выгружен на диск, остальные см. GlobalAIloc). Для получения значения счетчика блокировок следует использовать маску gmem_LockCount.

Функция GlobalFree. Заголовок:

Function GlobalFree(Mem: THandle): THandle;

Освобождает глобальный блок памяти, связанный с дескриптором Мет. Возвращает десриптор блока, если операция прошла успешно, или ноль — а противном случае.

Функция GobalFreePtr. Заголовок:

Function GobalFreePtr(P: Pointer): THandle;

Освобождает блок памяти, созданный с помощью обращения к GlobalAllocPtr.

функция GlobalHandle. Заголовок:

Function GlobalHandle(Mem: Word): Longint;

Возвращает селектор (в старшем слове) и дескриптор (в младшем) блока по его селектору Mem или ноль, если с блоком не связан дескриптор.

Функция GlobalLock. Заголовок:

Function GlobalLock(Mem: THandle): Pointer;

Фиксирует блок в памяти и возвращает его физический адрес. Функция увеличивает на единицу счетчик блокировок блока. Блок остается зафиксированным до тех пор, пока счетчик не станет равен нулю.

Функция GlobalLockPtr. Заголовок:

Function GlobalLockPtr(P: Pointer): Pointer;

Аналогична GlobalLock, но использует указатель вместо дескриптора. Функция GlobalLRUNewest. Заголовок:

Function GlobalLRUNewest(Mem: THandle): THandle;

Делает блок, связанный с дескриптором Mem, самым «свежим» и тем самым уменьшает вероятность его выгрузки на диск.

Функция GlobalLRUOldest. Заголовок:

Function GlobalLRUOldest(Mem: THandle): THandle;

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

Процедура GlobalNotify. Заголовок:

Procedure GlobalNotify(NotifyProc: TFarProc);

Устанавливает процедуру оповещения программы: NotifyProc — адрес процедуры, которая будет вызыватся всякий раз перед выгрузкой на диск блока, помеченного флагом gmem_Notify.

Функция GlobalPaqeLock. Заголовок:

Function GlobalPageLock(Selector: THandle): Word;

Увеличивает на единицу счетчик блокировок страниц памяти, связанной с селектором Selector, и возвращает новое значение счетчика. Для каждого вызова этой функции программа должна обеспечить вызов функции GIobalPageUnlock, которая осуществляет обратные действия. Программа должна использовать эту функцию только при крайней необходимости.

функция GlobalPaqeUnLock. Заголовок:

Function GlobalPageUnLock(Selector: THandle): Word;

Уменьшает на единицу счетчик блокировок страниц памяти, связанной с селектором Selector, и возвращает новое значение счетчика.

Функция GlobalPtrHandle. Заголовок:

Function GlobalPtrHandle(P: Pointer): THandle;

По заданному адресу блока возвращает его дескриптор. Функция GlobalReAlloc. Заголовок:

Function GlobalReAlloc(Mem: THandle; dwSize: Longint;

Flags: Word): THandle;

Перераспределяет блок памяти, устанавливая для него новый размер и флаги. Возвращает дескриптор блока, если операция выполнена, или ноль — в противном случае.

Функция GlobalReAllocPtr. Заголовок:

Function GlobalReAllocPtr(P: Pointer; Size: Longint;

Flags: Word): Pointer;

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

Функция GlobalSize. Заголовок:

Function GlobalSize(Mem: THandle): Longint;

Возвращает размер в байтах блока памяти, связанного с дескриптором Мет.

Функция GlobalUnfix. Заголовок:

Function GlobalUnfix(Mem: THandle): Boolean;

Уменьшает на единицу счетчик блокировок блока, связанного с дескриптором Мет. Если счетчик стал равен нулю, блок можно перемещать.

Функция GlobalUnlock. Заголовок:

Function GlobalUnlock(Mem: THandle): Boolean;

Уменьшает на единицу счетчик блокировок блока, связанного с дескриптором Мет. Если счетчик стал равен нулю, блок можно перемещать и/или выгружать.

Функция LockSeqment. Заголовок:

Function LockSegment(Segment: Word): THandle;

Фиксирует сегмент Segment и возвращает сегмент данных, если функция выполнена, или ноль, если сегмент выгружен на диск или обнаружена ошибка. Если Segment^-1, фиксируется текущий сегмент данных.

Функция Segment Unlock. Заголовок:

Function SegmentUnlock(Segment: Word): THandle;

Уменьшает на единицу счетчик блокировок сегмента Segment. Результат, возвращаемый функцией, должен игнорироваться.

 

Глава 9

Оглавление 

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz