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

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

Таблица 7.14. Средства Object Pascal для работы с памятью

Function Addr(X): Pointer; | Возвращает адрес аргумента X. Аналогичный результат возвращает операция @
Procedure Dispose (var P: Pointer) ; | Возвращает в кучу фрагмент динамической памяти, который ранее был зарезервирован за типизированным указателем P
Procedure Free-Mem(var P: Pointer; Size: Integer) ; | Возвращает в кучу фрагмент динамической памяти, который ранее был зарезервирован за нетипизированным указателем Р
Procedure Get-Mem(var P: Pointer; Size: Integer) ; | Резервирует за нетипизированным указателем Р фрагментдинамической памяти требуемого размера Size
Procedure New(var P: Pointer) ; | Резервирует фрагмент кучи для размещения переменной и помещает в типизированный указатель Р адрес первого байта
Function SizeOf(X): Integer; | Возвращает длину в байтах внутреннего представления указанного объекта Х

Windows имеет собственные средства работы с памятью. В табл. 7.15 перечислены соответствующие API-функции и даны краткие пояснения. За более полной информацией обращайтесь к справочной службе в файлах WIN32. hlp или WIN32S. hlp.

Таблица 7.15. Средства Windows для работы с памятью

CopyMemory | Копирует содержимое одного блока памяти в другой блок. Блоки не должны перекрываться хотя бы частично
FillMemory | Заполняет блок памяти указанным значением
GetProcessHeap | Возвращает дескриптор кучи для текущей программы
GetProcessHeaps | Возвращает дескрипторы куч для всех работающих программ
GlobalAlloc | Резервирует в куче блок памяти требуемого размера
GlobalDiscard | Выгружает блок памяти
GlobalFlags | Возвращает информацию об указанном блоке памяти
GlobalFree | Освобождает блок памяти и возвращает его в общий пул памяти
GlobalHandle | Возвращает дескриптор блока памяти, связанного с заданным указателем
GlobalLock | Фиксирует блок памяти и возвращает указатель на его первый байт
GlobalMemoryStatus | Возвращает информацию о доступной памяти (как физической, так и виртуальной)
GlobalReAlloc | Изменяет размер и атрибуты ранее зарезервированного блока памяти
GlobalSize | Возвращает размер в байтах блока памяти
GlobalUnlock | Снимает фиксацию блока памяти и делает его перемещаемым
HeapAlloc | Резервирует в куче неперемещаемый блок памяти
HeapCompact | Удаляет фрагментацию кучи
HeapCreate | Создает для программы новую кучу
HeapDestroy | Возвращает кучу в общий пул памяти
HeapFree | Освобождает блок памяти, зарезервированный функциями HeapAlloc или HeapReAlloc
HeapLock | Делает указанную кучу доступной только для текущего потока
HeapReAlloc | Изменяет размер и/или свойства кучи
HeapSize | Возвращает размер кучи в байтах
HeapUnlock | Делает указанную кучу доступной для любых потоков текущего процесса
HeapValidate | Проверяет состояние кучи или размещенного в ней блока памяти
IsBadCodePtr | Сообщает, может ли вызывающая программа читать данные из указанного адреса памяти (но не из блока памяти)
IsBadHugeReadPtr | Сообщает, может ли вызывающая программа читать данные из указанного блока памяти
IsBadHugeWritePtr | Сообщает, может ли вызывающая программа изменять содержимое указанного блока памяти
IsBadReadPtr | Сообщает, может ли вызывающая программа читать данные из указанного блока памяти
IsBadStringPtr | Сообщает, может ли программа читать содержимое строки, распределенной в куче
IsBadWritePtr | Сообщает, может ли вызывающая программа изменять содержимое указанного блока памяти
LocalAlloc | Аналогична GlobalAlloc
:: LocalDiscard | Аналогична GloalDiscard
'LocalFlags | Аналогична GlobalFlags
LocalFree | Аналогична Global Free
LocalHandle | Аналогична GlobalHandle
LocalLock | Аналогична GlobalLock
LocalReAlloc | Аналогична GlobalReAlloc
LocalSize | Аналогична GlobalSize
LocalUnlock | Аналогична GlobalUnlock
MoveMemory | Копирует один блок памяти в другой. Блоки могут перекрываться
VirtualAlloc | Резервирует блок виртуальной памяти
VirtualFree | Освобождает блок виртуальной памяти
VirtualLock | Фиксирует блок виртуальной памяти
VirtualProtect | Изменяет права доступа текущей программы к виртуальному блоку памяти
VirtualProtectEx | Изменяет права доступа указанной программы к виртуальному блоку памяти
VirtualQuery | Возвращает свойства виртуального блока памяти по отношению к вызывающей программе
VirtualQueryEx | Возвращает свойства виртуального блока памяти по отношению к указанной программе
VirtualUnloc'k | Снимает фиксацию блока виртуальной памяти
ZeroMemory | Заполняет блок памяти нулями