HeapSize, fonction (heapapi.h)
Récupère la taille d’un bloc de mémoire alloué à partir d’un tas par la fonction HeapAlloc ou HeapReAlloc .
Syntaxe
SIZE_T HeapSize(
[in] HANDLE hHeap,
[in] DWORD dwFlags,
[in] LPCVOID lpMem
);
Paramètres
[in] hHeap
Handle vers le tas dans lequel se trouve le bloc de mémoire. Ce handle est retourné par la fonction HeapCreate ou GetProcessHeap .
[in] dwFlags
Options de taille de tas. La spécification de la valeur suivante remplace la valeur correspondante spécifiée dans le paramètre flOptions lors de la création du tas à l’aide de la fonction HeapCreate .
Valeur | Signification |
---|---|
|
L’accès sérialisé ne sera pas utilisé. Pour plus d'informations, consultez la section Notes.
Pour vous assurer que l’accès sérialisé est désactivé pour tous les appels à cette fonction, spécifiez HEAP_NO_SERIALIZE dans l’appel à HeapCreate. Dans ce cas, il n’est pas nécessaire de spécifier davantage HEAP_NO_SERIALIZE dans cet appel de fonction. Cette valeur ne doit pas être spécifiée lors de l’accès au tas de processus. Le système peut créer des threads supplémentaires dans le processus de l’application, tels qu’un gestionnaire CTRL+C, qui accèdent simultanément au tas de processus. |
[in] lpMem
Pointeur vers le bloc de mémoire dont la fonction obtiendra la taille. Il s’agit d’un pointeur retourné par la fonction HeapAlloc ou HeapReAlloc . Le bloc de mémoire doit provenir du tas spécifié par le paramètre hHeap .
Valeur retournée
Si la fonction réussit, la valeur de retour correspond à la taille demandée du bloc de mémoire alloué, en octets.
Si la fonction échoue, la valeur de retour est (SIZE_T)-1
. La fonction n’appelle pas SetLastError. Une application ne peut pas appeler GetLastError pour obtenir des informations d’erreur étendues.
Si le paramètre lpMem fait référence à une allocation de tas qui ne se trouve pas dans le tas spécifié par le paramètre hHeap , le comportement de la fonction HeapSize n’est pas défini.
Remarques
La sérialisation garantit l’exclusion mutuelle lorsque deux ou plusieurs threads tentent d’allouer simultanément ou de libérer des blocs du même tas. La sérialisation coûte peu de performances, mais elle doit être utilisée chaque fois que plusieurs threads allouent et libèrent de la mémoire 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 risque d’endommager 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 comporte plusieurs threads, mais un seul thread appelle les fonctions de tas pour un tas spécifique.
- Le processus comporte plusieurs threads, et l’application fournit son propre mécanisme d’exclusion mutuelle à un tas spécifique.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | heapapi.h (inclure Windows.h) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |