IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Vérifier ses allocations mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 18
    Par défaut Vérifier ses allocations mémoire
    Bonjour,

    J'ai un programme dans lequel je crée des objets et des tableaux dynamiques. Je suis sur Mac, et je surveille avec le moniteur d'activité l'occupation mémoire de mon programme lors de son execution.

    Le problème que j'ai constaté est que l'occupation mémoire augmente de façon constante tout au long de l'execution. J'ai donc tenter la manip suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main
    {
    TData* d;
    char c;
    cout << "BEGIN" << endl; cin >> c; //Ici occupation mémoire = 1.25Mo
    d = new TData("data/SJC1_dat.txt",1);
    cout << "AFTER ALLOC" << endl; cin >> c; //On passe a 1.41Mo
    delete d;
    cout << "AFTER DELETE" << endl; cin >> c; //On reste a 1.41Mo
    return 0;
    }
    J'ai donc l'impression que le delete n'a eu aucun effet (bien que j'ai implémenté le destructeur.
    Cela signifie-t'il que mon allocation/desallocation est mauvaise, ou bien est-ce que ma démarche n'a pas de sens ?

    Autre fait étrange, lorsque j'utilise l'alias suivant pour compiler puis lancer:
    clear; make clean; make && ./run
    j'obtient une occupation initiale du processus run de 1.25Mo, tandis que lorsque je tape simplement ./run, l'occupation initiale est de 416k

    Merci beaucoup !
    Cordialement

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    D'aprés ce que tu dis j'aurais tendance à penser que la mesure donnée par MacOS sur l'occupation mémoire de ton programme ./run n'est pas exactement la mesure que tu cherches.

    Il y a souvent plusieurs types de mémoire allouée pour un programme (paginée, non paginée, réservée, comited, ...).
    Pour ta dépendance entre ta commande make clean & run, ce n'est pas abérrant, mais une explication correcte serait vraiment longue.

    Je crois que tu devrais utiliser une mécanique de vérification des fuites mémoires & co. au niveau du C++.

    Pour ça il faudrait savoir sur quel compilo tu travailles : gcc ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 18
    Par défaut
    Merci,

    Oui j'utilise gcc (enfin g++) version 4.0.1.
    Si j'ai bien compris tu me conseilles d'utiliser une sorte de librairie que j'utiliserais à la place de new et delete et qui comptabiliserait tout ça ?
    A part ça, quel type d'outil puis-je utiliser pour vérifier mes allocations mémoire ?
    Je teste aussi mon code sous Suse Linux 10.1 si il contient des outils intéressants par défaut.

    Cordialement,

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Je ne connais pas trop Mac, mais déjà avec gcc tu devrais avoir d'emblée une solution de vérification mémoire si tu compiles et link avec l'option "-g".

    Regarde par exemple ici :
    http://www.linuxjournal.com/article/6390
    OU
    http://gcc.gnu.org/onlinedocs/gcc/De...g-Options.html

    Ou une simple recherche sur "gcc debugging memory allocation"

    Sous Linux c'est encore plus cool, tu as des outils comme valgrind.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    l'outil pour checker ta memoire sous linux c'est: valgrind

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 18
    Par défaut
    Citation Envoyé par alskaar
    l'outil pour checker ta memoire sous linux c'est: valgrind
    Effectivement, c'est ce que j'ai utilisé (j'ai vu ca dans un autre post récent), et j'ai pu résoudre toutes les fuites mémoires (ce qui m'a pris un certain temps..).
    Je n'ai pas encore repassé le projet sous MacOs pour voir si l'utilisation mémoire allait toujours croissante.

    Merci beaucoup pour votre aide.
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 08h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 10h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo