Fonctions de raccordement d'allocationAllocation Hook Functions

Une fonction de raccordement d’allocation, installée à l’aide de _CrtSetAllocHook, est appelée chaque fois en mémoire est allouée, réallouée ou libérée.An allocation hook function, installed using _CrtSetAllocHook, is called every time memory is allocated, re-allocated, or freed. Ce type de raccordement a de multiples applications.This type of hook can be used for many different purposes. 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.Use it to test how an application handles insufficient memory situations, for example, or to examine allocation patterns, or to log allocation information for later analysis.

Note

Tenez compte des restrictions sur l’utilisation des fonctions de bibliothèque Runtime C dans une fonction de raccordement d’allocation, décrite dans raccordements d’Allocation et Allocations de mémoire d’exécution C.Be aware of the restriction about using C run-time library functions in an allocation hook function, described in Allocation Hooks and C Run-Time Memory Allocations.

Une fonction de raccordement d'allocation doit avoir un prototype similaire au suivant :An allocation hook function should have a prototype like the following:

int YourAllocHook(int nAllocType, void *pvData,  
        size_t nSize, int nBlockUse, long lRequest,  
        const unsigned char * szFileName, int nLine )  

Le pointeur que vous passez à _CrtSetAllocHook est de type _CRT_ALLOC_HOOK, comme défini dans CRTDBG. H :The pointer that you pass to _CrtSetAllocHook is of type _CRT_ALLOC_HOOK, as defined in 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, le nAllocType argument indique quelles allocation opération doit être effectuée (_HOOK_ALLOC, _HOOK_REALLOC, ou _HOOK_FREE).When the run-time library calls your hook, the nAllocType argument indicates what allocation operation is about to be performed (_HOOK_ALLOC, _HOOK_REALLOC, or _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é.In the case of a free or a reallocation, pvData contains a pointer to the user topic of the block about to be freed. Toutefois, dans le cas d'une allocation, ce pointeur est null, car l'allocation n'a pas encore eu lieu.However, in the case of an allocation, this pointer is null, because the allocation has not yet occurred. 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.The remaining arguments contain the size of the allocation in question, its block type, the sequential request number associated with it, and a pointer to the file name and line number in which the allocation was made, if available. Une fois que la fonction de raccordement effectue l’analyse et d’autres tâches voulues de son auteur, elle doit retourner TRUE, indiquant que l’opération d’allocation peut se poursuivre, ou FALSE, qui indique que le l’opération doit échouer.After the hook function performs whatever analysis and other tasks its author wants, it must return either TRUE, indicating that the allocation operation can continue, or FALSE, indicating that the operation should fail. Un simple raccordement de ce type peut vérifier la quantité de mémoire allouée jusqu'à ce stade et retourner FALSE si cette quantité dépassait une petite limite.A simple hook of this type might check the amount of memory allocated so far, and return FALSE if that amount exceeded a small limit. 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.The application would then experience the kind of allocation errors that would normally occur only when available memory was very low. 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.More complex hooks might keep track of allocation patterns, analyze memory use, or report when specific situations occur.

Voir aussiSee Also

Raccordements d’allocation et Allocations de mémoire du runtime C Allocation Hooks and C Run-Time Memory Allocations
Écriture de fonctions de raccordement de débogageDebug Hook Function Writing