Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1917 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC] Fuites mémoire =>help!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] Fuites mémoire =>help!!

n°649776
Yoyo@
Posté le 20-02-2004 à 14:17:41  profilanswer
 

Salut!
 
Je faisias quelques tests ce matin, car j'ai une appli graphique qui "fuit" a priori! En tout cas, elle plante assez rapidement orsqu'elle s'exécute sous Win98, mais elle marche parfaitement sous Win2000 et WinXP!
 
Bref, j'essaie de trouver des moyens pour trouver ces fuites, à l'aide d'outils annexes!
 
Alors, j'ai voulu essayer Process Viewer. Celui ci me permet de voir, a priori, en temps réel, la mémoire utilisée par chacun des process (zone appelées Working Set et Heap Usage)
 
Alors, juste pour voir (je la fais court), j'essaie d'exécuter la fonction suivante, et de regarder l'état de mon appli avant et après :
 
void CTestingGraphicsView::OnTest()  
{
  // TODO: Add your command handler code here
  const int NUM = 102400;
  CPen myPen[NUM];
}
 
Et là stupéfaction : avant exécution, mon Heap Usage est de 192ko
Après la première exécution, il est de 984 ko, puis, à chaque fois que je réexcute la fonction (tout en laisant l'appli ouverte : je le fais à l'aide d'un bouton), le Heap Usage reste à 984ko.
 
Par contre, si je fais un MyClass myClass[NUM], là tout redescend à 192ko à chaque fois!
 
Sinon, si je mets NUM à 10240 au lieu de 102400, le Heap Usage augmente à la premiere exécution de la fonction, mais seulement à 264ko.
 
Bref, tout celà me laisse perplexe!
 
Ce que j'aime pas, c'est que dans la référence MSDN, ils ne sont pas vraiment transparents sur ce qu'il se passe, donc, c'est aps facile de vraiment comprendre et de maitriser son sujet!!
 
Comment peut on expliquer ça?

mood
Publicité
Posté le 20-02-2004 à 14:17:41  profilanswer
 

n°654628
youmoussa
Ecrou-vis
Posté le 25-02-2004 à 15:52:53  profilanswer
 

il existe des outils pour tracker les memory leak, qui sont capables de te dire quelle variable n'est pas désallouée. (mais là tt de suite me souviens pas de nom..)

n°654721
gilou
Modérateur
Modzilla
Posté le 25-02-2004 à 16:16:52  profilanswer
 

De toute facon, quel interet d'allouer 102400 CPen.
Si tu as envie de faire des programmes qui bouffent tes ressources, libre a toi, mais sinon, je ne pourrais m'empécher de penser qu'il y a probablement plus optimal.
Et si ca deconne sous win98, c'est probablement parce que tu depasse le maximum autorise.
A+,


Message édité par gilou le 25-02-2004 à 16:19:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°654862
Yoyo@
Posté le 25-02-2004 à 16:56:01  profilanswer
 

gilou a écrit :

De toute facon, quel interet d'allouer 102400 CPen.
Si tu as envie de faire des programmes qui bouffent tes ressources, libre a toi, mais sinon, je ne pourrais m'empécher de penser qu'il y a probablement plus optimal.
Et si ca deconne sous win98, c'est probablement parce que tu depasse le maximum autorise.
A+,


 
L'intéret d'allouer 104200 CPen? Bah aucun, si ce n'est de faire apparaitre la moindre fuite mémoire (qui est alors démultipliée)!
 
Sinon, depuis le temps où j'avais posté ce message, j'ai pu avancer, et en fait, je me rends compte que Win98 pose certains problemes avec certaines méthodes de la MFC. Par exemple, il eut y avoir des fuites de mémoire avec un BitBlt si le DC temporaire n'est pas détruit à la main!
 
Voici un autre exemple :
 
http://www.codeguru.com/mfc/comments/35190.shtml
 
Le seul probleme, c que je n'ai pas Win98 chez moi, donc, je peux pas  vraiment tester sou cet environnement, alors que sous WinXP et win 2k, tout marche nickel !

n°654953
youmoussa
Ecrou-vis
Posté le 25-02-2004 à 18:08:13  profilanswer
 

euh, ca me revient boundschecker
http://www.compuware.com/products/ [...] bounds.htm

n°654971
gilou
Modérateur
Modzilla
Posté le 25-02-2004 à 18:17:50  profilanswer
 

Citation :

Sinon, depuis le temps où j'avais posté ce message, j'ai pu avancer, et en fait, je me rends compte que Win98 pose certains problemes avec certaines méthodes de la MFC. Par exemple, il eut y avoir des fuites de mémoire avec un BitBlt si le DC temporaire n'est pas détruit à la main!


 
Bien sur, c'est parfaitement normal. Si c'etait pas le cas, ca serait plus win98. C'est pas que ca pose certains problemes, c'est que pour programmer sous win98, il y avait certaines contraintes a respecter, contraintes qui ont (pour certaines) disparues avec les evolutions successives de cet OS.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°654976
Yoyo@
Posté le 25-02-2004 à 18:23:03  profilanswer
 


J'ai lu pas mal de mal sur BoundChecker, question de rapport prestation/prix (car il parait que ca vaut super cher) et surtout, je suis tombé récemmment sur un PDF qui expliquait comment obtenir un résultat similaire "a la main" en faisant une "photographie" de la pile d'exécution des fonctions avant et apres appel! (Mais j'ai pas testé)
 
Merci en tout cas pour l'effort!

n°654995
Kristoph
Posté le 25-02-2004 à 18:33:58  profilanswer
 

Bohem GC pour tracker gratuitement les memory leak.
 
Valgrind pour tester de façon très poussée la validité de tes programmes ( utilisation de mémoire non allouée, memory leak à la sortie du programme, buffer overflow, utilisation du cache L1, L2 ... )

n°655009
Yoyo@
Posté le 25-02-2004 à 18:44:48  profilanswer
 

Merci beaucoup.
 
En fait, pour ma part, j'ai toujours utilisé dbmon.exe, mais bon, il ne détecte pas tout, et encore moins les fuites mémoire dues a MFC. (Mais bon, ct déja mieux que rien)

n°655069
gilou
Modérateur
Modzilla
Posté le 25-02-2004 à 19:43:01  profilanswer
 

Bound checker, j'ai pas mal utilisé, et c'est un excellent outil. Hélas cher.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 25-02-2004 à 19:43:01  profilanswer
 

n°655085
youmoussa
Ecrou-vis
Posté le 25-02-2004 à 20:10:31  profilanswer
 

gilou a écrit :

Bound checker, j'ai pas mal utilisé, et c'est un excellent outil. Hélas cher.
A+,


 
 :jap: Mais à vrai dire
1- je ne connais pas le prix
2- c'est le seul que j'ai utilisé
 
Mais c'est extremement pratique..


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC] Fuites mémoire =>help!!

 

Sujets relatifs
[HELP] E-commerce avec MyMarketHELP !!!!! Creer un report avec VB TRES URGENT
Help commande store[MFC] Un bouton avec une icone supportant le theme XP
[PHP-COOKIE] Help me - a n'y rien comprendre :([MFC] Quand appeler fonction en étant sur que la dialog est affichée ?
HELP !! segmentation fault... besoin d'aideHELP !! segmentation fault... besoin d'aide
sql helpInclure un rendu du page HTML dans une fenetre classique MFC
Plus de sujets relatifs à : [MFC] Fuites mémoire =>help!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR