Fonctions de raccordement d'allocationAllocation Hook Functions

Une fonction de raccordement d’allocation, installée à l’aide de _CrtSetAllocHook, est appelée chaque fois la mémoire est allouée, réaffectée ou libérée.An allocation hook function, installed using _CrtSetAllocHook, is called every time memory is allocated, reallocated, or freed. Vous pouvez utiliser ce type de raccordement pour de nombreux scénarios différents.You can use this type of hook for many different purposes. Utilisez-le pour tester comment une application gère les situations de mémoire insuffisante, par exemple pour examiner les modèles d’allocation, ou enregistrer des informations d’allocation pour une analyse ultérieure.Use it to test how an application handles insufficient memory situations, such as to examine allocation patterns, or log allocation information for later analysis.

Note

N’oubliez pas de la restriction 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 runtime 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 comme dans l’exemple suivant :An allocation hook function should have a prototype like the following example:

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, tel que 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 est sur le point d’être apportées (_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 made (_HOOK_ALLOC, _HOOK_REALLOC, or _HOOK_FREE). Dans un gratuit ou dans une réallocation, pvData possède un pointeur vers l’article de l’utilisateur du bloc qui va être libéré.In a free or in a reallocation, pvData has a pointer to the user article of the block about to be freed. Toutefois d’allocation, ce pointeur est null, car l’allocation n’a pas encore s’est produite.However for an allocation, this pointer is null, because the allocation hasn't occurred. Les autres arguments contiennent la taille de l’allocation concernée, son type de bloc, le numéro de requête séquentiel associée et un pointeur vers le nom de fichier.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. S’il est disponible, les arguments incluent également le numéro de ligne dans laquelle l’allocation a été effectuée.If available, the arugments also include the line number in which the allocation was made. Une fois que la fonction de raccordement effectue l’analyse et les autres tâches veut de son auteur, elle doit retourner TRUE, indiquant que l’opération d’allocation peut se poursuivre, ou FALSE, qui indique que le 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