Функция LocalReAlloc изменяет размер или атрибуты указанного объекта локальной памяти. Размер может быть изменен как в сторону уменьшения, так и в сторону увеличения.
Примечание: глобальные и локальные функции работают медленнее, чем остальные функции менеджера памяти. Поэтому новые приложения должны использовать функции по работе с кучей.
function LocalReAlloc( hMem: HLOCAL; // дескриптор объекта глобальной памяти uBytes: UINT; // новый размер блока uFlags: UINT // каким образом изменять размер блока памяти ): HLOCAL; stdcall;
Параметры
hMem [in]
Дескриптор объекта локальной памяти, размер которого должен быть изменен. Должен
быть получен путем вызова функций LocalAlloc или
LocalReAlloc.
uBytes [in]
Задает новый размер блока памяти в байтах. Если параметр uFlags содержит флаг
LMEM_MODIFY, то этот параметр игнорируется.
uFlags [in]
Содержит каким образом следует производить перераспределение памяти. Если указан
флаг LMEM_MODIFY, то изменяться только атрибуты объекта локальной памяти, а
параметр uBytes будет проигнорирован. Другими словами этот параметр управляет
перераспреелением памяти объекта. Вы можете комбинировать значение флага
LMEM_MODIFY со следующими флагами:
| Флаг | Значение |
|---|---|
LMEM_DISCARDABLE |
Игнорируется. Оставлен только из соображений совместимости с 16-битной Windows. Тем не менее в Win32 вы можете производить вызов функции LocalDiscard для того, чтобы разрушить объект в памяти не разрушая его дескриптор. |
Если не указан флаг LMEM_MODIFY, то этот параметр может быть комбинацей следующих флагов:
| Флаг | Значение |
|---|---|
LMEM_MOVEABLE |
Текущий объект локальной памяти становиться перемещаемым. Если значение этого флага не указано, то объект памяти может изменить свой размер только в текущем месте. Важно! В этом случае возвращаемым значением служит дескриптор объекта локальной памяти. Для того, чтобы получить указатель на объект в локальной памяти, следует воспользоваться функцией LocalLock. |
LMEM_NOCOMPACT |
Игнорируется. Оставлен только из соображений совместимости с 16-битной Windows. |
LMEM_ZEROINIT |
Если размер блока памяти увеличивается, то остаток заполняется нулями. |
Возвращаемое значение
В случае удачного завершения возвращаемым значением функции является дескриптор перераспределнного объекта памяти.
В случае ошибки возвращаемым значением является 0. Для получения расширенной информации об ошибке следует сделать вызов GetLastError.
Описание
В случае ошибки память не освобождается, и переданное в функцию значение дескриптора остается корректным.
Если результатом функции LocalReAlloc является фиксированный объект локальной памяти, то возвращаемый дескриптор является адресом начального байта блока памяти. Для доступа к такой памяти процесс должен выполнить простое приведение типов.
Отличия Windows 95/98
Менеджер памяти для кучи спроектирован так, что размер одного блока не может
превышать четыре мегабайта. Поэтому, если вы рассчитываете оперировать с блоками
размером более одного или двух мегабайт, то для этой цели мы рекомендуем
пользоваться функциями VirtualAlloc и
VirtualAllocEx.
Требования
Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
Windows 95/98: Требуется Windows 95 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Windows
Смотри также:
LocalLock |
LocalShrink![]() |
© Mystic, 2002