Compartilhar via


Funções de gancho da alocação

Uma função de gancho de alocação, instalada usando _CrtSetAllocHook, é chamada cada vez que a memória é alocada, realocada ou liberada. Esse tipo de gancho pode ser usada para muitas finalidades diferentes. Use-o para testar como um aplicativo trata situações de memória insuficiente, por exemplo, ou para examinar padrões de alocação ou registrar informações de alocação para análise posterior.

Dica

Lembre-se da restrição sobre as funções da biblioteca em tempo de execução C em uma função de gancho de alocação, descrita em Ganchos de alocação e alocações de memória de tempo de execução C.

Uma função de gancho de alocação deve ter um protótipo como o seguinte:

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

O ponteiro que você passa para _CrtSetAllocHook é do tipo _CRT_ALLOC_HOOK, conforme definido em CRTDBG.H:

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

Quando a biblioteca em tempo de execução chama seu gancho, o argumento nAllocType indica qual operação de alocação está prestes a ser executada (_HOOK_ALLOC, _HOOK_REALLOC ou _HOOK_FREE). No caso de uma alocação livre ou realocação, o pvData contém um ponteiro para o tópico de usuário do bloco que está para ser liberado. No entanto, no caso de uma alocação, esse ponteiro é nulo, porque a alocação ainda não ocorreu. Os argumentos restantes contêm o tamanho da alocação em questão, seu tipo de bloco, o número sequencial da solicitação associado a ele e um ponteiro para o nome de arquivo e o número de linha nos quais a alocação foi feita, se houver. Depois que a função de gancho executar as análises e outras tarefas que o autor desejar, ela deverá retornar TRUE, indicando que a operação de alocação pode continuar ou FALSE, indicando que a operação falhará. Um gancho simples desse tipo pode verificar a quantidade de memória alocada até agora e retornar FALSE se essa quantidade exceder um limite pequeno. O aplicativo apresentaria o tipo de erros de alocação que ocorreriam normalmente apenas quando a memória disponível estivesse muito baixa. Ganchos mais complexos podem controlar os padrões de alocação, analisar o uso de memória ou reportar quando as situações específicas surgem.

Consulte também

Conceitos

Ganchos de alocação e alocações de memória de tempo de execução do C

Outros recursos

Gravação da função de gancho de depuração

crt_dbg2 Sample