Fonctions de raccordement d'allocation
Une fonction de raccordement d'allocation, installée avec _CrtSetAllocHook, est appelée chaque fois que la mémoire est allouée, réallouée ou libérée.Ce type de raccordement a de multiples applications.Utilisez-la, par exemple, pour tester la façon dont une application gère les situations de mémoire insuffisante, pour examiner les modèles d'allocation ou pour enregistrer les informations des allocations en vue d'une analyse ultérieure.
[!REMARQUE]
Tenez compte de la restriction concernant l'utilisation des fonctions de la bibliothèque Runtime C dans une fonction de raccordement d'allocation, décrite dans Raccordements d'allocation et allocations de la mémoire runtime C.
Une fonction de raccordement d'allocation doit avoir un prototype similaire au suivant :
int YourAllocHook(int nAllocType, void *pvData,
size_t nSize, int nBlockUse, long lRequest,
const unsigned char * szFileName, int nLine )
Le pointeur passé à _CrtSetAllocHook est du type _CRT_ALLOC_HOOK, comme cela est défini dans CRTDBG.H :
typedef int (__cdecl * _CRT_ALLOC_HOOK)
(int, void *, size_t, int, long, const unsigned char *, int);
Lorsque la bibliothèque Runtime appelle votre raccordement, l'argument nAllocType indique quelle opération d'allocation est sur le point d'être exécutée (_HOOK_ALLOC, _HOOK_REALLOC ou _HOOK_FREE).Dans le cas d'une libération ou d'une réallocation, pvData contient un pointeur vers la rubrique utilisateur du bloc qui va être libéré.Toutefois, dans le cas d'une allocation, ce pointeur est null, car l'allocation n'a pas encore eu lieu.Les autres arguments contiennent la taille de l'allocation concernée, son type de bloc, le numéro de requête séquentiel qui lui est associé et, le cas échéant, un pointeur vers le nom du fichier et le numéro de la ligne où l'allocation a été effectuée.Une fois que la fonction de raccordement a effectué l'analyse et les autres tâches voulues par son auteur, elle doit retourner TRUE, pour indiquer que l'opération d'allocation peut se poursuivre, ou FALSE, pour indiquer que l'opération doit échouer.Un simple raccordement de ce type pourrait vérifier la quantité de mémoire allouée jusqu'à ce stade et retourner FALSE si cette quantité dépassait une petite limite.L'application serait alors confrontée au type d'erreurs d'allocation qui, en temps normal, survient uniquement lorsque la mémoire disponible est très faible.Des raccordements plus complexes permettraient d'assurer le suivi des modèles d'allocation, d'analyser l'utilisation de la mémoire ou de reporter des situations spécifiques.
Voir aussi
Tâches
Concepts
Raccordements d'allocation et allocations de la mémoire runtime C