LocalReAlloc

Функция 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

Смотри также:

  • управление памятью,
  • работа с кучей,
  • функции для работы с кучей,
  • глобальные и лоальные функции,
  • LocalAlloc,
  • LocalFree,
  • LocalLock
  • НазадLocalLock LocalShrinkВперед

    © Mystic, 2002