Процедуры и функции для работы с динамической памятью
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 | Заполняет блок памяти нулями |