На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

GlobalAlloc



The GlobalAlloc function allocates the specified number of bytes from the heap. In the linear Win32 API environment, there is no difference between the local heap and the global heap.

HGLOBAL GlobalAlloc(

UINT uFlags, // object allocation attributes
DWORD dwBytes // number of bytes to allocate
);


Parameters

uFlags

Specifies how to allocate memory. If zero is specified, the default is GMEM_FIXED. Except for the incompatible combinations that are specifically noted, any combination of the following flags can be used. To indicate whether the function allocates fixed or movable memory, specify one of the first four flags:

Flag Meaning
GMEM_FIXED Allocates fixed memory. This flag cannot be combined with the GMEM_MOVEABLE or GMEM_DISCARDABLE flag. The return value is a pointer to the memory block. To access the memory, the calling process simply casts the return value to a pointer.
GMEM_MOVEABLE Allocates movable memory. This flag cannot be combined with the GMEM_FIXED flag. The return value is the handle of the memory object. The handle is a 32-bit quantity that is private to the calling process. To translate the handle into a pointer, use the GlobalLock function.
GPTR Combines the GMEM_FIXED and GMEM_ZEROINIT flags.
GHND Combines the GMEM_MOVEABLE and GMEM_ZEROINIT flags.
GMEM_DDESHARE Allocates memory to be used by the dynamic data exchange (DDE) functions for a DDE conversation. Unlike Windows version 3. x, this memory is not shared globally. However, this flag is available for compatibility purposes. It may be used by some applications to enhance the performance of DDE operations and should, therefore, be specified if the memory is to be used for DDE. Only processes that use DDE or the clipboard for interprocess communications should specify this flag.
GMEM_DISCARDABLE Allocates discardable memory. This flag cannot be combined with the GMEM_FIXED flag. Some Win32-based applications may ignore this flag.
GMEM_LOWER Ignored. This flag is provided only for compatibility with Windows version 3. x.
GMEM_NOCOMPACT Does not compact or discard memory to satisfy the allocation request.
GMEM_NODISCARD Does not discard memory to satisfy the allocation request.
GMEM_NOT_BANKED Ignored. This flag is provided only for compatibility with Windows version 3. x.
GMEM_NOTIFY Ignored. This flag is provided only for compatibility with Windows version 3. x.
GMEM_SHARE Same as the GMEM_DDESHARE flag.
GMEM_ZEROINIT Initializes memory contents to zero.


dwBytes

Specifies the number of bytes to allocate. If this parameter is zero and the uFlags parameter specifies the GMEM_MOVEABLE flag, the function returns a handle to a memory object that is marked as discarded.



Return Values

If the function succeeds, the return value is the handle of the newly allocated memory object.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.

Remarks

If the heap does not contain sufficient free space to satisfy the request, GlobalAlloc returns NULL.
Because NULL is used to indicate an error, virtual address zero is never allocated. It is, therefore, easy to detect the use of a NULL pointer.
All memory is created with execute access; no special function is required to execute dynamically generated code.
Memory allocated with this function is guaranteed to be aligned on an 8-byte boundary.
The GlobalAlloc and LocalAlloc functions are limited to a combined total of 65,536 handles for GMEM_MOVEABLE and LMEM_MOVEABLE memory per process. This limitation does not apply to GMEM_FIXED or LMEM_FIXED memory.

If this function succeeds, it allocates at least the amount of memory requested. If the actual amount allocated is greater than the amount requested, the process can use the entire amount. To determine the actual number of bytes allocated, use the GlobalSize function.

See Also

GlobalFree, GlobalLock, GlobalReAlloc, GlobalSize, LocalAlloc


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

GlobalAlloc



Функция GlobalAlloc распределяет определенное количество байтов из кучи. В линейной среде Win32 API, нет различия между локальной кучей и глобальная куча.

HGLOBAL GlobalAlloc(

UINT uFlags, // ОБЪЕКТНОЕ распределение приписывает количество DWORD dwBytes // байтов, чтобы распределяться
);


Параметры

uFlags

Определяет как, чтобы распределять память. Если нуль определен, невыполнение - GMEM_FIXED. За исключением несовместимых комбинаций, которые особо отмечены, любая комбинация следующего сигнализирует может быть использовано. Для того, чтобы указывать распределяет функция фиксированную или подвижную память, определите один из первых четырех флагов:

Значение Флага
GMEM_FIXED Распределяет фиксированную память. Этот флаг не может быть объединен GMEM_MOVEABLE или флагом GMEM_DISCARDABLE. Обратная величина является указателем блоку памяти. Чтобы иметь доступ к памяти, вызов процесса просто бросает обратную величину на указатель.
GMEM_MOVEABLE Распределяет подвижную память. Этот флаг не может быть объединен флагом GMEM_FIXED. Обратная величина является ручкой объекта памяти. Ручка является 32- битовым количеством, которое частное на вызове процесса. Для того, чтобы переводиться ручку на указатель, используйте функцию GlobalLock.
GPTR ОБЪЕДИНЯЕТ GMEM_FIXED и флаги GMEM_ZEROINIT.
GHND ОБЪЕДИНЯЕТ GMEM_MOVEABLE и флаги GMEM_ZEROINIT.
GMEM_DDESHARE Распределяет память, которая нужно использоваться динамическим обменом данных функций (DDE) для разговора DDE. В отличие от версии Windows 3. x, эта память не распространяется глобально. Тем не менее, этот флаг доступен для целей совместимости. Может быть использовано некоторыми приложениями, чтобы повышать исполнение операций DDE и должно, следовательно, определено если память должна быть использована для DDE. Только процессы, которые используют DDE или буфер для межпроцессовой связи должно определить этот флаг.
GMEM_DISCARDABLE Распределяет исключаемую память. Этот флаг не может быть объединен флагом GMEM_FIXED. Некоторые основавшие приложения Win32 может проигнорировать этот флаг.
GMEM_LOWER Проигнорирован. Этот флаг предусматривается только для совместимости с версией Windows 3. x. GMEM_NOCOMPACT не уплотняет или отвергнут память, чтобы удовлетворять запрос распределения.
GMEM_NODISCARD не отвергает память, чтобы удовлетворять запрос распределения.
GMEM_NOT_BANKED Проигнорирован. Этот флаг предусматривается только для совместимости с версией Windows 3. x. GMEM_NOTIFY Проигнорированной. Этот флаг предусматривается только для совместимости с версией Windows 3. x. GMEM_SHARE Также, как флаг GMEM_DDESHARE.
GMEM_ZEROINIT Инициализирует содержание памяти в нуль.


dwBytes

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



Обратные Величины

Если функция добивается успеха, обратная величина является ручкой вновь размещенного объекта памяти.
Если функция терпит неудачу, обратная величина НЕДЕЙСТВИТЕЛЬНА. Для того, чтобы расширять информацию ошибки, назовите GetLastError.

Замечания

Если куча не содержит достаточное свободное пространство, чтобы удовлетворять запрос, возврат GlobalAlloc НЕДЕЙСТВИТЕЛЬНЫЙ.
Поскольку НЕДЕЙСТВИТЕЛЬНЫЙ использован, чтобы указывать ошибку, виртуальный нуль адреса никогда не распределен. Это является, следовательно, легко, чтобы обнаруживать использование НЕДЕЙСТВИТЕЛЬНОГО указателя.
Вся память создана выполнять доступ; требуется, чтобы никакая специальная функция не выполнила динамически сгенерированный код.
Память распределенная этой функцией гарантирована, чтобы быть выровненн на 8- байтовой границе.
GlobalAlloc И функции LocalAlloc ограниченные комбинированным в общей сложности 65,536 ручками для GMEM_MOVEABLE и памяти LMEM_MOVEABLE за процесс. Это ограничение не относится к GMEM_FIXED или памяти LMEM_FIXED.

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

Смотри Также

GlobalFree, GlobalLock, GlobalReAlloc, GlobalSize, LocalAlloc


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz