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 :

[C++] allocation dynamique de la mémoire trop importante


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Par défaut [C++] allocation dynamique de la mémoire trop importante
    Bonjour,

    J'ai une application qui fait une importante opération et qui prend les 100% de l'UC.

    Durant cette opération la charge dédiée dans le gestionnaire de tâche augmente sans cesse jusqu'à atteindre les 500Mo. Enorme...

    J'ai fait attention à ce que chaque allocation de mémoire avec l'opérateur new soit suivi d'un delete. Mais rien n'y fait je reste à 500Mo. Ce qui me fait peur c'est qu'à la fin de mon opération je reste à 500Mo. Et la aussi je n'arrive pas à faire redescendre la valeur. Il faut que je kill le process pour revenir à la normale.

    Dans le code je fais à chaque fois ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MonObj * obj = new MonObj()
     
    /*fait appel au destructeur de mon objet qui lui même delete les objets du style TStringList ... */
    delete obj ; 
    obj = NULL;
    Comment faire pour améliorer l'allocation dynamique de la mémoire ?
    Merci

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MonObj * obj = new MonObj()
     
    /*fait appel au destructeur de mon objet qui lui même delete les objets du style TStringList ... */
    delete MonObj; 
    MonObj = NULL;
    Ca compile ça ???? Car MonObj est une classe (et pas une instance) et tu fais MonObj = NULL et delete MonObj.

  3. #3
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Par défaut
    Désolé je me suis trompé en écrivant! Je fais biensur un delete sur obj et je remet obj à NULL.

    Je suis un peu fatigué moi LOL!

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Ca ne suffit pas à faire prendre autant de mémoire.


    As-tu des allocations qui sont écrites dans une boucle ?

    Car a priori, c'est plus le comportement d'un programme du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(true)
      obj = new Objet();
     
    delete obj;
    Normalement, il est possible de détecter ce genre de problème (soit en regardant ton code de plus près), soit avec un utilitaire de détection de fuite mémoire du style : valgrind.

    EDIT : mais si ton code n'est pas très gros, ça va peut être plus vite de voir ça à la main.

  5. #5
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Par défaut
    J'ai en effet dans mon code quelques endroits ou je boucle et je fais des allocations dynamiques. Mais j'ai bien regardé, a chaque sortie de boucle je delete.

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par Pfeffer
    J'ai en effet dans mon code quelques endroits ou je boucle et je fais des allocations dynamiques. Mais j'ai bien regardé, a chaque sortie de boucle je delete.

    Tu es sûr de sortir de ta boucle. Tu vois que dans l'exemple que je t'ai montré, il y a une fois écrit new pour une fois écrit delete, pourtant, il y a une infinité de new qui sera fait à l'exécution.

Discussions similaires

  1. Allocation de mémoire trop importante[france ioi]
    Par anorexia dans le forum Débuter
    Réponses: 0
    Dernier message: 21/02/2009, 16h17
  2. allocation dynamique de la mémoire
    Par ralf91 dans le forum C#
    Réponses: 4
    Dernier message: 08/04/2008, 18h16
  3. Réponses: 6
    Dernier message: 20/02/2008, 10h24
  4. [VC++/ASM] Allocation dynamique de mémoire ?
    Par Magus (Dave) dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 21/12/2004, 15h05
  5. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31

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