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?