Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
.gif)
.gif)
.gif)