Funzione HeapSize (heapapi.h)
Recupera le dimensioni di un blocco di memoria allocato da un heap dalla funzione HeapAlloc o HeapReAlloc .
Sintassi
SIZE_T HeapSize(
[in] HANDLE hHeap,
[in] DWORD dwFlags,
[in] LPCVOID lpMem
);
Parametri
[in] hHeap
Handle per l'heap in cui risiede il blocco di memoria. Questo handle viene restituito dalla funzione HeapCreate o GetProcessHeap .
[in] dwFlags
Opzioni relative alle dimensioni dell'heap. Se si specifica il valore seguente, viene eseguito l'override del valore corrispondente specificato nel parametro flOptions quando l'heap è stato creato usando la funzione HeapCreate .
Valore | Significato |
---|---|
|
L'accesso serializzato non verrà utilizzato. Per altre informazioni, vedere la sezione Osservazioni.
Per garantire che l'accesso serializzato sia disabilitato per tutte le chiamate a questa funzione, specificare HEAP_NO_SERIALIZE nella chiamata a HeapCreate. In questo caso, non è necessario specificare HEAP_NO_SERIALIZE in questa chiamata di funzione. Questo valore non deve essere specificato quando si accede all'heap del processo. Il sistema può creare thread aggiuntivi all'interno del processo dell'applicazione, ad esempio un gestore CTRL+C, che accede contemporaneamente all'heap del processo. |
[in] lpMem
Puntatore al blocco di memoria la cui dimensione otterrà la funzione. Si tratta di un puntatore restituito dalla funzione HeapAlloc o HeapReAlloc . Il blocco di memoria deve provenire dall'heap specificato dal parametro hHeap .
Valore restituito
Se la funzione ha esito positivo, il valore restituito è la dimensione richiesta del blocco di memoria allocato, in byte.
Se la funzione ha esito negativo, il valore restituito è (SIZE_T)-1
. La funzione non chiama SetLastError. Un'applicazione non può chiamare GetLastError per informazioni sugli errori estese.
Se il parametro lpMem fa riferimento a un'allocazione heap non presente nell'heap specificato dal parametro hHeap , il comportamento della funzione HeapSize non è definito.
Commenti
La serializzazione garantisce l'esclusione reciproca quando due o più thread tentano di allocare o liberare blocchi contemporaneamente dallo stesso heap. La serializzazione prevede un costo di prestazioni ridotto, ma deve essere usata ogni volta che più thread allocano e liberano memoria dallo stesso heap. L'impostazione del valore HEAP_NO_SERIALIZE elimina l'esclusione reciproca nell'heap. Senza serializzazione, due o più thread che usano lo stesso handle heap potrebbero tentare di allocare o liberare memoria contemporaneamente, causando probabilmente un danneggiamento nell'heap. Il valore HEAP_NO_SERIALIZE può pertanto essere usato in modo sicuro solo nelle situazioni seguenti:
- Il processo ha un solo thread.
- Il processo ha più thread, ma un solo thread chiama le funzioni dell'heap per un heap specifico.
- Il processo ha più thread e l'applicazione fornisce il proprio meccanismo per l'esclusione reciproca a un heap specifico.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP [app desktop | App UWP] |
Server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | heapapi.h (include Windows.h) |
Libreria | Kernel32.lib |
DLL | Kernel32.dll |