Versiones de depuración de las funciones de asignación del montón
La biblioteca de tiempo de ejecución de C (CRT) contiene versiones especiales de depuración de las funciones de asignación del montón. Estas funciones tienen los mismos nombres que las versiones release con _dbg
anexadas. En este artículo se describen las diferencias entre la versión release de una función de CRT y la _dbg
versión, utilizando malloc
y _malloc_dbg
como ejemplos.
Comportamiento en compilaciones de depuración
Cuando _DEBUG
se define, el CRT asigna todas las malloc
llamadas a _malloc_dbg
. Por lo tanto, no es necesario volver a escribir el código mediante _malloc_dbg
en lugar de malloc
recibir las ventajas durante la depuración.
No obstante, se puede llamar a _malloc_dbg
explícitamente. Llamar explícitamente a _malloc_dbg
presenta algunas ventajas adicionales:
Seguimiento de asignaciones de tipos
_CLIENT_BLOCK
.Almacenamiento del archivo de código fuente y número de línea donde se produjo la solicitud de asignación de memoria.
Si no desea convertir las malloc
llamadas a _malloc_dbg
, puede obtener la información del archivo de origen definiendo _CRTDBG_MAP_ALLOC
, lo que hace que el preprocesador asigne directamente todas las llamadas a malloc
_malloc_dbg
en lugar de confiar en un contenedor alrededor malloc
de .
Para realizar un seguimiento de los tipos de asignaciones que existen en los bloques cliente de forma independiente, se debe llamar directamente a _malloc_dbg
y asignar a blockType
el parámetro _CLIENT_BLOCK
.
Comportamiento en compilaciones que no son de depuración
Cuando _DEBUG
no se define, las llamadas a malloc
no se molestan, las llamadas a se resuelven malloc
en _malloc_dbg
, la definición de se omite y no se proporciona información de _CRTDBG_MAP_ALLOC
archivo de origen relativa a la solicitud de asignación. Dado malloc
que no tiene un parámetro de tipo de bloque, las solicitudes de _CLIENT_BLOCK
tipos se tratan como asignaciones estándar.