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 :

[Mémoire] Utilisation memoire importante


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut [Mémoire] Utilisation memoire importante
    Bonjour,

    Je me permet de poser ces quelques questions suite à mes recherches infructueuses sur le forum.

    Je viens de réaliser un programme en C++ sous Ubuntu qui fonctionne plutôt bien () mais je pense avoir un gros problème d'utilisation de la mémoire. En effet l'éxecution de mon programme se passe à merveille seulement en tapant la commande "top" dans un terminal afin d'observer les répercutions de mon programme sur la mémoire et le CPU je me pose de grosse question. En effet mon programme atteint pratiquement 200m d'utilisation memoire (VIRT = 200m = RES + SWAP = 20m + 180m)...

    Il ne s'agit pourtant pas d'un énorme projet (même si cela n'a pas grand chose à voir avec l'espace utilisé durant l'éxecution, 146 KB pour un petite vingtaine de fichier cpp et hpp). Il s'agit d'un programme executant principalement 3 threads: un client TCP/IP, un server TCP/IP et un autre thread faisant appel aux deux précédents. J'utilise donc les threads, les mutexs, les semaphores, les sockets et une platforme de communication entre différents processus d'une application (spécialisée pour la robotique).

    J'ai déjà eu recours à l'outil valgrind qui permet d'acquérir un bon nombre d'information sur l'utilisation de la mémoire mais celui si ne me signale pas d'erreur particulière justifiant une telle utilisation de mémoire.

    Je me demande simplement si lmon interpretation de la commande "top" est bonne et dans ce cas si une telle utilisation de mémoire serait normale...

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Regarde /proc/<processid>/maps pour avoir un peu plus d'info sur la maniere dont la memoire est utilisee.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Merci pour la réponse rapide. Je viens de regarder les infos qu'il est possible d'avoir sur l'utilisation mémoire dans proc/. En regardant le smaps j ai pu voir que la taille du mapping de mon application est d'environ 1m et que tous le reste de la memoire utilisée se situe dans la pile (heap).
    Pouvez-vous m'aidez à interpréter cela.
    Si vous avez des bon liens expliquant l'utilisation de la pile me permettant de comprendre ce qu'il se passe dans mon programme quels sont les choix qui sont fait pour l'utilisation de la pile, etc.
    Merci d'avance...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    A quoi correspond le "Private_Dirty" dans chacun des process's mapping du fichier "proc/pid/smaps"?
    Cela correspond-t-il une mauvaise utilisation de la mémoire?

    Ce que j'ai pu trouver pour le moment c'est:

    "Dirty means "might need writing to disk or swap." Takes more work to free."

    Je pense que la taille de ma pile est trop importante. Il y a-t-il un outil qui pourrait me lier cette mémoire avec mon code c++? cad par quelle instruction est-ce-que la demande de cet espace memoire a t elle été faite... Ca me paraît un peu dur la...

    Merci

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ta gestion de pile est configurée comment ?
    Ta pile s'agrandit au besoin ? Le problème avec ce mécanisme, c'est qu'elle réduit jamais...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Re,
    Je crois avoir repéré mon problème...
    Dans plusieurs de mes fichiers j'utilise des fonctions me retournant des structures parce que j'ai besoin que la fonction me retourne plusieurs valeurs.
    Je crée donc une structure dans le ".hpp" que j'utilise ensuite comme type de retour de mes fonctions (le type de retour n'est pas un pointeur sur structure mais bien une structure).
    La compilation seul d'un fichier contenant ce type de fonction me fait grossir mon exécutable de plus de 500KB !!! Un peu bizard non ? Le type de retour doit être un pointeur sur structure pour éviter cela (je suis en train d 'essayer...)?
    Merci pour votre aide

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Par défaut
    Citation Envoyé par boummah Voir le message
    En regardant le smaps j ai pu voir que la taille du mapping de mon application est d'environ 1m et que tous le reste de la memoire utilisée se situe dans la pile (heap).
    Heap, c'est pas la pile, c'est le tas.

    La pile, c'est stack.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Désolé pour l'erreur sur la pile
    Sinon je viens d'essayer de changer le type de mes fonctions de struture à pointeur sur structure mais ça ne change rien... Je passe toujours d'un exécutable de 170 KB à un exécutable de 1.1MB en ajoutant seulement cette fonction me retournant un pointeur sur structure.

    PS: peut-être devrais-je lancer une autre discussion le problème ayant évoluer entre temps?

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par boummah Voir le message
    Désolé pour l'erreur sur la pile
    Sinon je viens d'essayer de changer le type de mes fonctions de struture à pointeur sur structure mais ça ne change rien... Je passe toujours d'un exécutable de 170 KB à un exécutable de 1.1MB en ajoutant seulement cette fonction me retournant un pointeur sur structure.

    PS: peut-être devrais-je lancer une autre discussion le problème ayant évoluer entre temps?
    Si c'est bien sur le tas que tu consommes, c'est que tu alloues directement ou indirectement beaucoup de memoire.

    Si c'est sur la pile, c'est que tu as des variables locales de taille importante.

    Les jeux de devinettes, c'est bien, mais sans voir le code on ne peut faire que des hypotheses et ca lasse vite.

Discussions similaires

  1. utilisation memoire
    Par reptils dans le forum wxWidgets
    Réponses: 1
    Dernier message: 03/02/2006, 03h27
  2. minimiser la mémoire utilisée pour stocker de l'information
    Par midy dans le forum Général Python
    Réponses: 3
    Dernier message: 30/01/2006, 15h17
  3. [Info]Mémoire utilisée
    Par lr dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 24/10/2005, 10h34
  4. Supprimer la mémoire utilisée par les variables globales
    Par dnaprotector dans le forum OpenGL
    Réponses: 4
    Dernier message: 21/07/2005, 13h18
  5. [Info][Mémoire] utilisée pour un pointeur null
    Par thomas_strass dans le forum Langage
    Réponses: 14
    Dernier message: 04/11/2004, 12h48

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