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