GlobalReAlloc

Функция GlobalReAlloc изменяет размер или атрибуты указанного объекта глобальной памяти. Размер может быть изменен как в сторону уменьшения, так и в сторону увеличения.

Примечание: глобальные и локальные функции работают медленнее, чем остальные функции менеджера памяти. Поэтому новые приложения должны использовать функции по работе с кучей. Тем не менее, глобальные функции все еще используются при работе с DDE и областью обмена.

function GlobalReAlloc(
  hMem: HGLOBAL;     // дескриптор объекта глобальной памяти
  dwBytes: DWORD;    // новый размер блока
  uFlags: UINT       // каким образом изменять размер блока памяти
): HGLOBAL; stdcall;

Параметры

hMem [in]
Дескриптор объекта глобальной памяти, размер которого должен быть изменен. Должен быть получен путем вызова функций GlobalAlloc или GlobalReAlloc.

dwBytes [in]
Задает новый размер блока памяти в байтах. Если параметр uFlags содержит флаг GMEM_MODIFY, то этот параметр игнорируется.

uFlags [in]
Содержит каким образом следует производить перераспределение памяти. Если указан флаг GMEM_MODIFY, то изменяться только атрибуты объекта глобальной памяти, а параметр dwBytes будет проигнорирован. Другими словами этот параметр управляет перераспреелением памяти объекта. Вы можете комбинировать значение флага GMEM_MODIFY со следующими флагами:

Флаг Значение

GMEM_DISCARDABLE

Игнорируется. Оставлен только из соображений совместимости с 16-битной Windows.

Тем не менее в Win32 вы можете производить вызов функции GlobalDiscard для того, чтобы разрушить объект в памяти не разрушая его дескриптор.

В 16-битной Windows делает блок памяти уничтоженным, если указан флаг GMEM_MODIFY. Если объект до этого имел статус фиксированного и не указан флаг GMEM_MOVEABLE, то этот флаг игнорируется.

GMEM_MOVEABLE

Если указан также флаг GMEM_MODIFY, то фиксированный объект памяти становиться перемещаемым. Если ни один из флагов GMEM_MODIFY и GMEM_MOVEABLE не задан, то фиксированные объекты в памяти, а также блокированные перемещаемые объекты могут изменить свой размер только в текущем положении указателя (без перемещения объекта).

Если парметр не содержит флаг GMEM_MODIFY, то он также может быть комбинацией следующих флагов:

Флаг Значение

GMEM_NOCOMPACT

Игнорируется. Оставлен только из соображений совместимости с 16-битной Windows.

GMEM_ZEROINIT

Если размер блока памяти увеличивается, то остаток заполняется нулями.

Возвращаемое значение

В случае удачного завершения возвращаемым значением функции является дескриптор перераспределнного объекта памяти.

В случае ошибки возвращаемым значением является 0. Для получения расширенной информации об ошибке следует сделать вызов GetLastError.

Описание

Если результатом функции GlobalReAlloc является перемещаемый объект глобальной памяти, то возвращаемое значение вляется его дескриптором. Для того, чтобы получить указатель, вы должны вызвать функцию GlobalLock.

Если результатом функции GlobalReAlloc является фиксированный объект глобальной памяти, то возвращаемый дескриптор является адресом начального байта блока памяти. Для доступа к такой памяти процесс должен выполнить простое приведение типов.

В случае ошибки память не освобождается, и переданное в функцию значение дескриптора остается корректным.

Отличия Windows 95/98
Менеджер памяти для кучи спроектирован так, что размер одного блока не может превышать четыре мегабайта. Поэтому, если вы рассчитываете оперировать с блоками размером более одного или двух мегабайт, то для этой цели мы рекомендуем пользоваться функциями VirtualAlloc и VirtualAllocEx.

Требования

Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
Windows 95/98: Требуется Windows 95 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Windows

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

  • управление памятью,
  • работа с кучей,
  • функции для работы с кучей,
  • глобальные и лоальные функции,
  • GlobalAlloc,
  • GlobalDiscard,
  • GlobalLock
  • НазадGlobalLRUOldest GlobalSizeВперед

    © Mystic, 2002