Partager via


Comment : prendre des instantanés 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.

Remarque :

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio.

Cette rubrique explique comment prendre des instantanés de la mémoire pour faciliter la localisation d'une fuite de mémoire.

Pour détecter une fuite de mémoire

  1. Créez un objet CMemoryState Members et appelez la fonction membre CMemoryState::Checkpoint. Le premier instantané de la mémoire est alors créé.

  2. Une fois que le programme a effectué ses opérations d'allocation et de libération de mémoire, créez un autre objet CMemoryState et appelez Checkpoint pour cet objet. Vous obtenez ainsi un deuxième instantané de l'utilisation de la mémoire.

  3. Créez un troisième objet CMemoryState et appelez sa fonction membre CMemoryState::Difference en fournissant les deux précédents objets CMemoryState comme arguments. S'il existe une différence entre les deux états de la mémoire, la fonction Difference retourne une valeur autre que zéro. Cela indique que certains blocs de mémoire n'ont pas été libérés.

    L'exemple suivant présente l'aspect du code :

    // Declare the variables needed
    #ifdef _DEBUG
        CMemoryState oldMemState, newMemState, diffMemState;
        oldMemState.Checkpoint();
    #endif
    
        // Do your memory allocations and deallocations.
        CString s("This is a frame variable");
        // The next object is a heap object.
       CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
    
    #ifdef _DEBUG
        newMemState.Checkpoint();
        if( diffMemState.Difference( oldMemState, newMemState ) )
        {
            TRACE( "Memory leaked!\n" );
        }
    #endif
    

    Notez que les instructions de vérification de la mémoire sont placées entre des blocs #ifdef _DEBUG / #endif : elles ne sont donc compilées que dans les versions Debug Win32 de votre programme.

    Maintenant que vous connaissez l'existence d'une fuite de mémoire, vous pouvez utiliser une autre fonction membre, CMemoryState::DumpStatistics, pour Affichage des statistiques de la mémoire, qui vous aidera à la localiser.

Voir aussi

Référence

_DEBUG

Autres ressources

Détection de fuite de mémoire dans MFC