|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : octobre 2012 Messages : 10 ![]() |
Bonjour,
J'ai créé un programme informatique qui utilise en permanence des malloc et des free. Bien évidement j'ai utilisé Valgrind pour repérer les fuites mémoires et les enlever, jusqu'à obtenir zéro fuites. Jusque là l'histoire est sans problème mais en jetant un petit coup d'oeil sur le moniteur système je me suis aperçu que mon programme ne fait que grignoter la mémoire au fur et à mesure du temps. La question est simple: comment ça se fait? |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Bonjour,
la réponse est tout aussi simple. Puisque tu certifies qu'il n'y a pas de fuite mémoire, et bien c'est parce que tu alloues, au fil du temps, dans ton programme informatique, de plus en plus de mémoire. CQFD |
|
|
10
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : octobre 2012 Messages : 10 ![]() |
si ça serai aussi simple j'en serai très heureux, j'ai besoin de filer un code simplifié donc..
Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Ingénieur Inscription : janvier 2009 Messages : 494 ![]() |
Je n'ai aucune envie de parcourir tes lignes de code.
Ce que je voulais dire c'est que, si tu es sur que tu n'as pas de fuite mémoire, que tu as, malgré tout, un "problème" de mémoire, le C, l'OS ne sont pas les premières choses à soupçonner. Même après 25 ans de développement en C, quand mon programme merde, c'est moi que je remets en cause. Je n'ai pas la réaction de dire que c'est le compilo qui a des bugs ou l'OS qui part en vrille. Donc, quand dans ton message initial, tu dis que tout est nickel et que ça ne marche pas, qu'attends-tu comme réponse ? Qu'imagines-tu qu'on puisse te dire ? |
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : octobre 2012 Messages : 10 ![]() |
dans mon premier message, je voulais juste comprendre. Même si je suis d'accord que je n'ai pas bien fait toutes les choses, je voulais de l'aide pour savoir d'où ça peut venir mais surtout trouver des pistes car en ce moment j'ai épuisé les solutions qui venaient à moi
|
|
|
00
|
|
|
#6 |
![]() ![]() |
Salut,
Personnellement, je pense que 110 ligne pour une fonction en en ayant retiré je ne sais combien pour les remplacer par blabla, c'est au moins quatre fois de trop... ![]() Peut etre devrais tu déjà essayer de faire en sorte de diviser cette fonction en une série de petite fonctions qui ne prennent qu'un aspect en charge, mais qui s'en occupent bien A partir de là, il te sera beaucoup plus facile de trouver "où le bat blesse" et d'y apporter une solution
__________________
en bas de page
|
|
|
10
|
|
|
#7 | |
|
Membre Expert
![]() Développeur en systèmes embarqués Inscription : mars 2006 Messages : 763 ![]() |
Salut,
Citation:
A+ Pfeuh |
|
|
|
00
|
|
|
#8 | |||
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 191 ![]() |
Citation:
Code :
sinon, en vrac :
|
|||
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 220 ![]() |
Bonjour,
Il suffit de lire les premières lignes pour savoir que la mémoire est insuffisamment gérée. Code :
Par conséquent, ton programme est nécessairement faux.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
||
|
00
|
|
|
#10 | ||||
|
Membre habitué
![]() Allan Étudiant Inscription : août 2012 Messages : 82 ![]() |
Citation:
Après j'ai 2 -3 autres remarques : Citation:
Pourquoi à chaque tour de boucle vérifier si continuer est égal à 0 et si c'est le cas tu affiches un message puis tu sors de ta boucle...? Code :
Je pense qu'il y a beaucoup de truc à revoir en commençant par découper ton code vérifier, tes retours de fonctions... |
||||
|
|
00
|
|
|
#11 | |||
|
Invité de passage
![]() Inscription : octobre 2012 Messages : 10 ![]() |
Désolé d'avoir donné un code totalement incomplet, je vous ai dit qu'avec valgrind je n'avais zéro fuite de mémoire et cela est vrai. L'explication de comment ça se fait que? c'est qu'il existe des fonctions de suppressions qui supprime les têtes de listes créés dans le main.
Citation:
Donc au final je vous rassure mes fonctions font de jolies choses dans le meilleur des mondes, je fait tout bien avec mes suppressions et mes allocations. A par qu'il est vrai et merci de l'avoir fait remarqué que mes fonctions sont trop grosses pour certaines et que j'aurai pu optimiser plus finement mon code. Citation:
Citation:
En tout cas merci d'avoir essayé de résoudre mon problème. Les raisons qui font que l'os ne récupère pas la mémoire libérée est en cours de résolution sur ce nouveau topic. http://www.developpez.net/forums/d12...t/#post7040121 |
|||
|
|
00
|
|
|
#12 | |
![]() ![]() |
Citation:
Quel que soit le code, le premier sujet est d'être un minimum "idiot proof", dans le sens où 90% des bugs trouvent leur origine entre le clavier et la chaise. Le fait de s'assurer qu'une entrée utilisateur est cohérente avec ce que l'on attend se doit d'être intégré dans ton système global de pensée car ce n'est qu'en gardant à l'esprit que l'utilisateur est un "imbécile distrait" que toute la logique pourra effectivement s'appliquer
__________________
en bas de page
|
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com