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



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 Заполняет блок памяти нулями


Содержание раздела