Compartir a través de


Funciones de enlace de asignación

Actualización: noviembre 2007

Este tema es aplicable a:

Edición

Visual Basic

C#

C++

Web Developer

Express

Sólo para código nativo

Standard

Sólo para código nativo

Pro y Team

Sólo para código nativo

Leyenda de la tabla:

Se aplica

No procede

Comando o comandos ocultos de manera predeterminada.

Una función de enlace de asignación, instalada mediante _CrtSetAllocHook, recibe una llamada cada vez que se asigna, reasigna o libera memoria. Este tipo de enlace se puede utilizar para muchos propósitos diferentes. Utilícelo para probar, por ejemplo, el modo en que una aplicación trata las situaciones de memoria insuficiente, para examinar pautas de asignación o para guardar información de asignación para análisis posteriores.

Nota:

Tenga en cuenta la restricción acerca del uso de funciones de la biblioteca en tiempo de ejecución de C en una función de enlace de asignación, descrita en Enlaces de asignación y asignaciones de memoria en tiempo de ejecución de C.

Una función de enlace de asignación debería tener un prototipo como el siguiente:

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

El puntero que se pasa a _CrtSetAllocHook es del tipo _CRT_ALLOC_HOOK, según se define en CRTDBG.H:

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

Cuando la biblioteca en tiempo de ejecución llama a la función de enlace, el argumento nAllocType indica qué operación de asignación se va a realizar (_HOOK_ALLOC, _HOOK_REALLOC o _HOOK_FREE). En caso de una liberación o reasignación, pvData contiene un puntero al tema de usuario del bloque que se va a liberar. Sin embargo, en el caso de una asignación, este puntero es null, ya que la asignación no se ha producido aún. Los restantes argumentos contienen el tamaño de la asignación, su tipo de bloque, el número de solicitud secuencial asociado con él, así como un puntero al nombre del archivo y número de línea donde se realizó la asignación, si se dispone de él. Después de que la función de enlace realiza las operaciones especificadas por su autor, debe devolver TRUE para indicar que la operación de asignación puede continuar, o bien FALSE, que indica que la operación ha resultado errónea. Un simple enlace de este tipo podría comprobar la cantidad de memoria asignada hasta entonces y devolver FALSE si esa cantidad supera un pequeño límite. La aplicación experimentaría entonces el tipo de errores de asignación que ocurrirían normalmente sólo cuando la memoria disponible fuera muy escasa. Mediante enlaces más complejos, se podrían registrar pautas de asignación, analizar el uso de la memoria o informar de situaciones específicas.

Vea también

Tareas

Ejemplo crt_dbg2: funciones de enlace de depuración de las bibliotecas en tiempo de ejecución de C

Conceptos

Enlaces de asignación y asignaciones de memoria en tiempo de ejecución de C

Otros recursos

Creación de funciones de enlace de depuración