Condividi tramite


Funzioni hook di allocazione

Le informazioni contenute in questo argomento sono valide per:

Edizione

Visual Basic

C#

F#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Pro, Premium e Ultimate

Argomento non applicabile Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Una funzione hook di allocazione, installata mediante _CrtSetAllocHook, viene chiamata ogni volta che viene allocata, riallocata o liberata memoria. Questo tipo di funzione è utilizzabile per numerosi scopi differenti. È possibile utilizzare le funzioni hook per verificare come un'applicazione gestisce situazioni di memoria insufficiente, ad esempio, oppure per esaminare schemi di allocazione o per registrare informazioni di allocazione da analizzare in seguito.

Nota

Tenere presente le restrizioni sull'utilizzo delle funzioni della libreria di runtime del linguaggio C in una funzione hook di allocazione descritte in Hook di allocazione e allocazioni di memoria di runtime C.

Una funzione hook di allocazione dovrebbe avere un prototipo analogo al seguente:

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

Il puntatore passato a _CrtSetAllocHook è del tipo _CRT_ALLOC_HOOK, come definito in CRTDBG.H:

typedef int (__cdecl * _CRT_ALLOC_HOOK)
    (int, void *, size_t, int, long, const unsigned char *, int);

Quando la libreria di runtime chiama la funzione hook, l'argomento nAllocType indica quale operazione di allocazione sta per essere eseguita (_HOOK_ALLOC, _HOOK_REALLOC o _HOOK_FREE). Nel caso di una liberazione o di una riallocazione, pvData conterrà un puntatore all'argomento utente del blocco che sarà liberato. Nel caso di un'allocazione, tuttavia, questo puntatore è nullo, poiché l'allocazione non ha ancora avuto luogo. I restanti argomenti contengono la dimensione dell'allocazione in questione, il tipo di blocco, il numero di richiesta sequenziale associato all'allocazione e un puntatore al nome file e al numero di riga in cui l'allocazione è stata effettuata, se tali informazioni sono disponibili. Dopo che la funzione hook ha eseguito l'analisi specifica nonché altre attività definite dall'autore della funzione stessa, essa dovrà restituire il valore TRUE, a indicare che l'operazione di allocazione può continuare, oppure il valore FALSE, a indicare che l'operazione deve essere interrotta. Una semplice funzione hook di questo tipo può controllare la quantità di memoria allocata fino a tale momento e restituire FALSE se tale quantità eccede, anche se di poco, il limite. L'applicazione sarà quindi soggetta agli errori di allocazione che in genere si verificano solo quando la memoria disponibile è molto scarsa. Funzioni hook più complesse possono tenere traccia degli schemi di allocazione, analizzare l'utilizzo della memoria o informare del verificarsi di determinate situazioni.

Vedere anche

Attività

Esempio crt_dbg2: funzioni hook di debug del runtime del linguaggio C

Concetti

Hook di allocazione e allocazioni di memoria di runtime C

Altre risorse

Scrittura di funzioni hook di debug