HeapCompact, fonction (heapapi.h)
Retourne la taille du bloc libre validé le plus grand dans le tas spécifié. Si le Désactiver la fusion du tas sur l’indicateur global libre est défini, cette fonction fusionne également les blocs libres adjacents de mémoire dans le tas.
Syntaxe
SIZE_T HeapCompact(
[in] HANDLE hHeap,
[in] DWORD dwFlags
);
Paramètres
[in] hHeap
Une poignée au tas. Ce handle est retourné par la fonction HeapCreate ou GetProcessHeap.
[in] dwFlags
Options d’accès au tas. Ce paramètre peut être la valeur suivante.
Valeur de retour
Si la fonction réussit, la valeur de retour est la taille du bloc libre validé le plus volumineux dans le tas, en octets.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations d’erreur étendues, appelez GetLastError.
Dans le cas peu probable où il n’y a absolument aucun espace disponible dans le tas, la valeur de retour de la fonction est zéro et GetLastError retourne la valeur NO_ERROR.
Remarques
La fonction HeapCompact est principalement utile pour le débogage. En règle générale, le système compacte le tas chaque fois que la fonction HeapFree est appelée, et la fonction HeapCompact retourne la taille du plus grand bloc libre dans le tas, mais ne compacte pas le tas plus loin. Si le Désactiver le tas se fusionne sur un indicateur global gratuit est défini pendant le débogage, le système ne compacte pas le tas et appelle la fonction HeapCompact compacte le tas. Pour plus d’informations sur les indicateurs globaux, consultez la documentation GFlags.
Il n’existe aucune garantie qu’une application peut allouer correctement un bloc de mémoire de la taille retournée par heapCompact. D’autres threads ou le seuil de validation peuvent empêcher une telle allocation.
La sérialisation garantit l’exclusion mutuelle lorsque deux threads ou plus tentent d’allouer ou de libérer simultanément des blocs à partir du même tas. Il existe un coût de performances réduit pour la sérialisation, mais il doit être utilisé chaque fois que plusieurs threads allouent et libèrent de la mémoire à partir du même tas. La définition de la valeur HEAP_NO_SERIALIZE élimine l’exclusion mutuelle sur le tas. Sans sérialisation, deux threads ou plus qui utilisent le même handle de tas peuvent tenter d’allouer ou de libérer de la mémoire simultanément, ce qui entraîne probablement une altération dans le tas. La valeur HEAP_NO_SERIALIZE peut donc être utilisée en toute sécurité uniquement dans les situations suivantes :
- Le processus n’a qu’un seul thread.
- Le processus a plusieurs threads, mais un seul thread appelle les fonctions de tas pour un tas spécifique.
- Le processus a plusieurs threads et l’application fournit son propre mécanisme d’exclusion mutuelle à un tas spécifique.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP [applications de bureau | Applications UWP] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau | Applications UWP] |
plateforme cible | Windows |
d’en-tête | heapapi.h (include Windows.h) |
bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |