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 :

out of memory


Sujet :

C++

  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut out of memory
    Bonjour a tous,

    voila j'ai coder un programme en c++ qui me permet de communiquer avec une machine. Or lorsque je laisse le programme tourner relativement longtemps (arrive surtout lorsque le programme tourne toute une nuit ) j'obtiens une exception "out of memory".

    Ayant fait une recherche Google ( je précise pour ceux qui me mettrais que google est mon ami JE SAIS ! ) : Je sais qu'une exception de "out of memory" provient du saturation de la mémoire.

    Etant sous un compilateur 32 bits je sais que je peut aller jusqu’à 2.5Go sans problème normalement. Or là le problème c'est que lorsque j'observe avec le gestionnaire de tache la mémoire utilisée par mon processus elle ne dépasse pas les 20 Méga.

    De quoi d'autre peut provenir cette erreur de out of memory ??????

    J'ai vérifié tout mes "new" pour être sûr qu'un "delete" y soit associé.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    J'ai vérifié tout mes "new" pour être sûr qu'un "delete" y soit associé.
    Apparemment pas
    Mais en utilisant les conteneurs de la STL et les pointeurs intelligents, tu ne devrais quasiment avoir plus de new/delete a écrire

    Essaye de voir si tu passer ton programme sous un analyseur tel valgrind ou Rational Purify
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Un petit coup de valgrind:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valgrind --tool=memcheck --leak-check=yes
    Par contre, je connaissais pas Rational Purify, je vais tester ça pour voir.
    Rien que le nom en impose

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    Citation Envoyé par flamme34 Voir le message
    Ayant fait une recherche Google ( je précise pour ceux qui me mettrais que google est mon ami JE SAIS ! ) : Je sais qu'une exception de "out of memory" provient du saturation de la mémoire.

    Etant sous un compilateur 32 bits je sais que je peut aller jusqu’à 2.5Go sans problème normalement. Or là le problème c'est que lorsque j'observe avec le gestionnaire de tache la mémoire utilisée par mon processus elle ne dépasse pas les 20 Méga.
    à moins que ton application soit la seule à être exécutée sur la machine, toutes partagent la même ram et peuvent donc la saturer.
    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 éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    désolé du temps de réponse mais j'ai été pas mal occupée ces dernier temps.

    à moins que ton application soit la seule à être exécutée sur la machine, toutes partagent la même ram et peuvent donc la saturer.
    Je n'est que cette appli qui tourne a l'exception des programmes habituels (logiciel de gestion de carte graphique, anti virus, etc )

    Essaye de voir si tu passer ton programme sous un analyseur tel valgrind ou Rational Purify
    En toute logique si il devais y avoir une fuite mémoire je devrais la voir dans la mémoire utilisé grâce au gestionnaire de tache de Windows?non?

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Salut,

    Je suis pas sûr que le gestionnaire des tâches de Windows te soit d'un grand secours si ton exception "out of memory" n'est lancé qu'au bout d'une nuit...

    Cherche plutôt du côté de valgrind comme te le conseil LinuxUser ou si tu utilises visual studio 2012, tu peux regarder ceci (je n'ai pas testé cette solution).

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Le gestionnaire des tâches de windows a une manière bien à lui d’afficher la mémoire utilisée.

    Notamment, il y a plusieurs colonnes :
    memory size
    vm size

    et encore un troisième que je n’ai plus en tête.

    Dans ton cas, je pense qu’il faut regarder la VM size, elle doit être beaucoup plus importante que tes 20 Mo.

    Autre chose : pour observer les memory leaks, un outil très pratique est le perfmon. Tu rajoutes un compteur sur les « private bytes » de ton process : s’ils augmentent sans jamais redescendre, il y a très vraisemblablement une fuite mémoire.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par LinuxUser Voir le message
    Par contre, je connaissais pas Rational Purify, je vais tester ça pour voir.
    Rien que le nom en impose
    Rational Purify est payant, si tu n'en disposes pas et que tu ne peux pas utiliser valgrind parce que ton appli ne tourne pas sous linux, tu peux essayer drmemory.

  9. #9
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Sous Windows, avec Visual Studio il y a aussi Visual Leak Detector.
    Mais en tout cas il faut effectivement se méfier du gestionnaire des tâches par rapport à l'occupation mémoire de ton appli.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #10
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    En debug, tu peux surcharger tes new et delete. A Chaque new, tu rajoutes l'adresse alloué dans un map avec la line et le nom de fichier en objet de la map et l'adresse en clé. En delete, tu supprimes cette entrée.
    A la destruction de ta map tu assert si il y a encore des entrées dans la map, et tu sauras grâce à la ligne et le nom de fichier ou est ton new qui déconne.

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Sous Visual, #define _CRTDBG_MAP_ALLOC le fera pour toi. _CrtDumpMemoryLeaks() listera les zones mémoires allouées, et _CrtSetReportMode() permet d'avoir la sortie ailleurs que dans le debugger.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [XStream][String]out of memory
    Par Invité dans le forum Persistance des données
    Réponses: 8
    Dernier message: 10/01/2006, 14h52
  2. [C++] [gcc] out of memory
    Par fxp17 dans le forum GCC
    Réponses: 5
    Dernier message: 06/01/2006, 10h29
  3. [pb mémoire] out of memory d'eclipse
    Par Casp dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/05/2005, 16h39
  4. Out of memory
    Par shurato dans le forum ANT
    Réponses: 1
    Dernier message: 10/11/2004, 16h19
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

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