Funzione GlobalAlloc (winbase.h)
Alloca il numero specificato di byte dall'heap.
Sintassi
DECLSPEC_ALLOCATOR HGLOBAL GlobalAlloc(
[in] UINT uFlags,
[in] SIZE_T dwBytes
);
Parametri
[in] uFlags
Attributi di allocazione della memoria. Se viene specificato zero, il valore predefinito è GMEM_FIXED. Questo parametro può essere uno o più dei valori seguenti, ad eccezione delle combinazioni incompatibili indicate in modo specifico.
Valore | Significato |
---|---|
|
Combina GMEM_MOVEABLE e GMEM_ZEROINIT. |
|
Alloca la memoria fissa. Il valore restituito è un puntatore. |
|
Alloca memoria rimovibile. I blocchi di memoria non vengono mai spostati nella memoria fisica, ma possono essere spostati all'interno dell'heap predefinito.
Il valore restituito è un handle per l'oggetto memory. Per convertire l'handle in un puntatore, usare la funzione GlobalLock . Questo valore non può essere combinato con GMEM_FIXED. |
|
Inizializza il contenuto della memoria su zero. |
|
Combina GMEM_FIXED e GMEM_ZEROINIT. |
I valori seguenti sono obsoleti, ma sono disponibili per la compatibilità con Windows a 16 bit. Vengono ignorati.
- GMEM_DDESHARE
- GMEM_DISCARDABLE
- GMEM_LOWER
- GMEM_NOCOMPACT
- GMEM_NODISCARD
- GMEM_NOT_BANKED
- GMEM_NOTIFY
- GMEM_SHARE
[in] dwBytes
Numero di byte da allocare. Se questo parametro è zero e il parametro uFlags specifica GMEM_MOVEABLE, la funzione restituisce un handle a un oggetto memoria contrassegnato come ignorato.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un handle per l'oggetto memoria appena allocato.
Se la funzione ha esito negativo, il valore restituito è NULL. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
La gestione della memoria di Windows non fornisce un heap locale separato e un heap globale. Pertanto, le funzioni GlobalAlloc e LocalAlloc sono essenzialmente uguali.
Il flag di memoria mobile contrassegna GHND e GMEM_MOVABLE aggiungere sovraccarico non necessario e richiedere l'uso sicuro del blocco. Devono essere evitati a meno che la documentazione non indichi specificamente che devono essere usate.
Le nuove applicazioni devono usare le funzioni heap per allocare e gestire la memoria, a meno che la documentazione non indichi in modo specifico che deve essere usata una funzione globale. Ad esempio, le funzioni globali vengono ancora usate con Dynamic Data Exchange (DDE), le funzioni degli Appunti e gli oggetti dati OLE.
Se la funzione GlobalAlloc ha esito positivo, alloca almeno la quantità di memoria richiesta. Se l'importo effettivo allocato è maggiore dell'importo richiesto, il processo può usare l'intero importo. Per determinare il numero effettivo di byte allocati, usare la funzione GlobalSize .
Se l'heap non contiene spazio libero sufficiente per soddisfare la richiesta, GlobalAlloc restituisce NULL. Poiché NULL viene usato per indicare un errore, l'indirizzo virtuale zero non viene mai allocato. È quindi facile rilevare l'uso di un puntatore NULL .
La memoria allocata con questa funzione è garantita l'allineamento su un limite di 8 byte. Per eseguire codice generato in modo dinamico, usare la funzione VirtualAlloc per allocare memoria e la funzione VirtualProtect per concedere l'accesso a PAGE_EXECUTE .
Per liberare la memoria, usare la funzione GlobalFree . Non è sicuro liberare memoria allocata con GlobalAlloc usando LocalFree.
Esempio
Il codice seguente mostra un semplice uso di GlobalAlloc e 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);
}
Requisiti
Client minimo supportato | Windows XP [app desktop | App UWP] |
Server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | winbase.h (include Windows.h) |
Libreria | Kernel32.lib |
DLL | Kernel32.dll |