Comparación de estados de la memoria

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.

Otra técnica para localizar pérdidas de memoria requiere tomar instantáneas del estado de la memoria de la aplicación en determinados puntos clave. La biblioteca CRT proporciona un tipo de estructura, _CrtMemState, que se puede utilizar para almacenar una instantánea del estado de la memoria:

_CrtMemState s1, s2, s3;

Para tomar una instantánea del estado de la memoria en un punto dado, pase una estructura _CrtMemState a la función _CrtMemCheckpoint. Esta función rellena la estructura con una instantánea del estado actual de la memoria:

_CrtMemCheckpoint( &s1 );

El contenido de una estructura _CrtMemState se puede volcar en cualquier punto pasando la estructura a la función _CrtMemDumpStatistics:

_CrtMemDumpStatistics( &s1 );

Esta función imprime un volcado de la información de asignación de memoria con el siguiente aspecto:

0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
3071 bytes in 16 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 3071 bytes.
Total allocations: 3764 bytes.

Para determinar si una pérdida de memoria se ha producido en una sección de código, se pueden tomar instantáneas del estado de la memoria antes y después de la sección y, a continuación, utilizar _CrtMemDifference para comparar los dos estados:

_CrtMemCheckpoint( &s1 );
// memory allocations take place here
_CrtMemCheckpoint( &s2 );

if ( _CrtMemDifference( &s3, &s1, &s2) )
   _CrtMemDumpStatistics( &s3 );

Como el nombre indica, _CrtMemDifference compara dos estados de memoria (s1 y s2) y produce un resultado (s3), que es la diferencia de los dos estados. Colocar llamadas a _CrtMemCheckpoint al principio y al final del programa y utilizar _CrtMemDifference para comparar los resultados es otro método para comprobar las pérdidas de memoria. Si se detecta una pérdida, se pueden utilizar llamadas a _CrtMemCheckpoint para dividir el programa y localizar la pérdida mediante la técnica de búsqueda binaria.

Vea también

Conceptos

Detección y aislamiento de pérdidas de memoria