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 :

désallocation de mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 113
    Par défaut désallocation de mémoire
    Bonjour à tous,

    J'ai un code de calcul qui a manifestement de gros problèmes de mémoires. En effet, quand je fais un décompte "grossier" des données utilisées par ce dernier et que je compare à ce que me donne le gestionnaire de ressources Windows, il semble que je consomme bien d'avantage que je ne le croyais.

    Pouvez-vous donc me dire lesquelles des grandeurs suivantes seront désallouées à la sortie de ? Lesquelles ne le seront pas ? Et pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    void func()
    {
        vector<double > vec_var;
        vector<double* > vec_ptr;
        double a = 1.0;
        double* b = nullptr;
        double* c = &a;
        double &d = a;
     
        for ( int i = 0; i<10000; i++)
        {
            vec_var.push_back(a);
            vec_ptr.push_back(&a);
        }
    }
    A priori et le sont mais je suis pris d'un doute pour les autres car je viens de découvrir que ne l'est pas... Vous confirmez ?

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Tu n'as aucune allocation dynamique* donc tout est désalloué correctement. Pourquoi crois-tu le contraire ?

    * les allocations dynamiques internes à vector sont correctement gérées par vector.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 113
    Par défaut
    Mince je viens de refaire mon essai et je me rend compte que c'est le vec_ptr.reserve(1000) que je faisait dans la fonction qui cause la non-désallocation de la mémoire... Pourquoi cela d'ailleurs ?

    J'ai effectivement lu à droite à gauche qu'il n'y avait que les allocations dynamiques qui causaient des fuites de mémoires. Je n'en utilise aucune (mis à part celles incluent dans les vector bien sur) alors cela m'étonne que mes fuites viennent de la . Je peux toutefois me tromper dans mon évaluation "grossière" mais j'en doute car comme c'est un code de calcul, ce qui prend de l'espace c'est un gros volume de données de même type facile à comptabiliser .

    J'ai aussi lu qu'un clear() sur un vector ne désallouait pas la mémoire même si cela réduisait la taille. Est ce vrai ? Y a-t-il d'autres "pièges" de ce type qui peuvent monopoliser de la RAM inutilement jusqu'à la fin du programme ?

    Merci beaucoup.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    - reserve ne cause pas plus de fuite mémoire
    - clear est appelé dans le destructeur de vector et se charge bien évidemment de désallouer la mémoire
    - ton évaluation grossière est fausse, on peut difficilement faire moins précis que "regarder le gestionnaire des tâches" pour évaluer la mémoire sous Windows
    Si tes sources prétendent vraiment cela, changes-en.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 113
    Par défaut
    Ouch ... c'est ce qui s'appelle se faire envoyer paitre...

    Mes sources en matière de c++ sont en grande partie des forums et ne sont donc pas des références j'en conviens. Faut il pour autant cesser d'utiliser des forums ?

    Une méthode, peut être, pour dénicher les fuites mémoires d'un programme ou pour faire une meilleure estimation de la consommation d'un programme ?

    Voici ce que j'avais lu sur clear() :
    http://stackoverflow.com/questions/1...d-upon-a-clear

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Sous Windows, il y a les compteurs de performance et la C-Runtime en débug pour avoir des choses bien plus pertinentes que le "gestionnaire des tâches".

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

Discussions similaires

  1. Problème de désallocation de mémoire
    Par ratan dans le forum Langage
    Réponses: 7
    Dernier message: 06/12/2011, 17h20
  2. Erreur de désallocation de mémoire
    Par ZAYDOUN dans le forum OpenCV
    Réponses: 10
    Dernier message: 05/08/2008, 16h27
  3. désallocation de mémoire
    Par Tex-Twil dans le forum C
    Réponses: 12
    Dernier message: 19/10/2006, 10h09
  4. allocation/désallocation de mémoire
    Par kinta dans le forum C++
    Réponses: 2
    Dernier message: 10/02/2006, 09h52
  5. Désallocation de mémoire ...
    Par Mike888 dans le forum C
    Réponses: 9
    Dernier message: 18/01/2006, 10h42

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