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