Función GlobalAlloc (winbase.h)
Asigna el número especificado de bytes del montón.
Sintaxis
DECLSPEC_ALLOCATOR HGLOBAL GlobalAlloc(
[in] UINT uFlags,
[in] SIZE_T dwBytes
);
Parámetros
[in] uFlags
Atributos de asignación de memoria. Si se especifica cero, el valor predeterminado es GMEM_FIXED. Este parámetro puede ser uno o varios de los valores siguientes, excepto las combinaciones incompatibles que se indican específicamente.
Valor | Significado |
---|---|
|
Combina GMEM_MOVEABLE y GMEM_ZEROINIT. |
|
Asigna memoria fija. El valor devuelto es un puntero. |
|
Asigna memoria móvil. Los bloques de memoria nunca se mueven en memoria física, pero se pueden mover dentro del montón predeterminado.
El valor devuelto es un identificador para el objeto de memoria. Para traducir el identificador a un puntero, use la función GlobalLock . Este valor no se puede combinar con GMEM_FIXED. |
|
Inicializa el contenido de la memoria en cero. |
|
Combina GMEM_FIXED y GMEM_ZEROINIT. |
Los siguientes valores están obsoletos, pero se proporcionan por compatibilidad con Windows de 16 bits. Se omiten.
- GMEM_DDESHARE
- GMEM_DISCARDABLE
- GMEM_LOWER
- GMEM_NOCOMPACT
- GMEM_NODISCARD
- GMEM_NOT_BANKED
- GMEM_NOTIFY
- GMEM_SHARE
[in] dwBytes
Número de bytes que se van a asignar. Si este parámetro es cero y el parámetro uFlags especifica GMEM_MOVEABLE, la función devuelve un identificador a un objeto de memoria marcado como descartado.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es un identificador para el objeto de memoria recién asignado.
Si la función no se realiza correctamente, el valor devuelto es NULL. Para obtener información de error extendida, llame a GetLastError.
Comentarios
La administración de memoria de Windows no proporciona un montón local independiente y un montón global. Por lo tanto, las funciones GlobalAlloc y LocalAlloc son básicamente las mismas.
Las marcas de memoria móvil GHND y GMEM_MOVABLE agregan sobrecarga innecesaria y requieren que el bloqueo se use de forma segura. Deben evitarse a menos que la documentación indique específicamente que deben usarse.
Las nuevas aplicaciones deben usar las funciones del montón para asignar y administrar memoria a menos que la documentación indique específicamente que se debe usar una función global. Por ejemplo, las funciones globales se siguen usando con el Intercambio dinámico de datos (DDE), las funciones del Portapapeles y los objetos de datos OLE.
Si la función GlobalAlloc se realiza correctamente, asigna al menos la cantidad de memoria solicitada. Si la cantidad real asignada es mayor que la cantidad solicitada, el proceso puede usar toda la cantidad. Para determinar el número real de bytes asignados, use la función GlobalSize .
Si el montón no contiene suficiente espacio libre para satisfacer la solicitud, GlobalAlloc devuelve NULL. Dado que NULL se usa para indicar un error, nunca se asigna la dirección virtual cero. Por lo tanto, es fácil detectar el uso de un puntero NULL .
Se garantiza que la memoria asignada con esta función se alinee en un límite de 8 bytes. Para ejecutar código generado dinámicamente, use la función VirtualAlloc para asignar memoria y la función VirtualProtect para conceder acceso PAGE_EXECUTE .
Para liberar la memoria, use la función GlobalFree . No es seguro liberar memoria asignada con GlobalAlloc mediante LocalFree.
Ejemplos
El código siguiente muestra un uso sencillo de GlobalAlloc y GlobalFree.
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _cdecl main()
{
PSECURITY_DESCRIPTOR pSD;
pSD = (PSECURITY_DESCRIPTOR) GlobalAlloc(
GMEM_FIXED,
sizeof(PSECURITY_DESCRIPTOR));
// Handle error condition
if( pSD == NULL )
{
_tprintf(TEXT("GlobalAlloc failed (%d)\n"), GetLastError());
return;
}
//see how much memory was allocated
_tprintf(TEXT("GlobalAlloc allocated %d bytes\n"), GlobalSize(pSD));
// Use the memory allocated
// Free the memory when finished with it
GlobalFree(pSD);
}
Requisitos
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | winbase.h (incluye Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |