Share via


Comparaison des états de la mémoire

Mise à jour : novembre 2007

Cette rubrique s'applique à :

Édition

Visual Basic

C#

C++

Web Developer

Express

La rubrique ne s'applique pas La rubrique ne s'applique pas

Natif uniquement

La rubrique ne s'applique pas

Standard

La rubrique ne s'applique pas La rubrique ne s'applique pas

Natif uniquement

La rubrique ne s'applique pas

Pro et Team

La rubrique ne s'applique pas La rubrique ne s'applique pas

Natif uniquement

La rubrique ne s'applique pas

Légende du tableau :

La rubrique s'applique

Applicable

La rubrique ne s'applique pas

Non applicable

La rubrique s'applique mais la commande est masquée par défaut

Commande ou commandes masquées par défaut.

Une autre technique pour détecter les fuites de mémoire consiste à prendre des instantanés de l'état de la mémoire de l'application en certains points clés. La bibliothèque CRT fournit un type de structure, _CrtMemState, dont vous pouvez vous servir pour stocker un instantané de l'état de la mémoire :

_CrtMemState s1, s2, s3;

Pour prendre un instantané de l'état de la mémoire en un point donné, passez une structure _CrtMemState à la fonction _CrtMemCheckpoint. Cette fonction remplit la structure avec un instantané de l'état actuel de la mémoire :

_CrtMemCheckpoint( &s1 );

Vous pouvez faire un dump du contenu d'une structure _CrtMemState en un point quelconque en passant la structure à la fonction _CrtMemDumpStatistics :

_CrtMemDumpStatistics( &s1 );

Cette fonction imprime un dump des informations d'allocation de mémoire qui a l'aspect suivant :

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.

Pour déterminer si une fuite de mémoire a eu lieu dans une section de code, vous pouvez prendre des instantanés de l'état de la mémoire avant et après la section, puis comparer les deux états avec _CrtMemDifference :

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

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

Comme son nom l'indique, _CrtMemDifference compare deux états de mémoire (s1 et s2) et produit un résultat (s3) qui correspond à la différence entre les deux états. En plaçant des appels à _CrtMemCheckpoint au début et à la fin de votre programme, puis en utilisant _CrtMemDifference pour comparer les résultats, vous disposez d'un autre moyen de rechercher les fuites de mémoire. Si une fuite est détectée, vous pouvez utiliser des appels à _CrtMemCheckpoint pour diviser votre programme et localiser la fuite avec une technique de recherche binaire.

Voir aussi

Concepts

Détection et isolement des fuites de mémoire