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