Funzione HeapCompact (heapapi.h)
Restituisce le dimensioni del blocco libero con commit più grande nell'heap specificato. Se viene impostata l'unione dell'heap Disable sul flag globale libero , questa funzione coalizza anche blocchi di memoria liberi adiacenti nell'heap.
Sintassi
SIZE_T HeapCompact(
[in] HANDLE hHeap,
[in] DWORD dwFlags
);
Parametri
[in] hHeap
Handle per l'heap. Questo handle viene restituito dalla funzione HeapCreate o GetProcessHeap .
[in] dwFlags
Opzioni di accesso dell'heap. Questo parametro può essere il valore seguente.
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. Non specificare questo valore 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. |
Valore restituito
Se la funzione ha esito positivo, il valore restituito corrisponde alla dimensione del blocco libero di commit più grande nell'heap, in byte.
Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Nel caso improbabile che non vi sia spazio assolutamente disponibile nell'heap, il valore restituito dalla funzione è zero e GetLastError restituisce il valore NO_ERROR.
Commenti
La funzione HeapCompact è particolarmente utile per il debug. In genere, il sistema compatta l'heap ogni volta che viene chiamata la funzione HeapFree e la funzione HeapCompact restituisce le dimensioni del blocco libero più grande nell'heap, ma non compatta ulteriormente l'heap. Se l'heap Disable heap coalesce on free global flag is set during debugging, the system does not compact the heap and calling the HeapCompact function does compact the heap. Per altre informazioni sui flag globali, vedere la documentazione di GFlags .
Non è garantito che un'applicazione possa allocare correttamente un blocco di memoria delle dimensioni restituite da HeapCompact. Altri thread o la soglia di commit potrebbero impedire tale allocazione.
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 |
Vedere anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per