jojomillenium
Messages postés136Date d'inscriptionsamedi 1 mai 2004StatutMembreDernière intervention26 mai 2007
-
4 déc. 2006 à 16:31
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 2007
-
11 déc. 2006 à 14:33
Bonjour,
J'aimerai comment savoir qu'est ce qui prend exactement la memoire dans mon programme!
Genre dans mon debug je vois a un moment (genre au niveau d'un breakpoint) que ma classe Truc contient 315 element et prend 2Mb de memoire....
Je sais qu'il y a:
jojomillenium
Messages postés136Date d'inscriptionsamedi 1 mai 2004StatutMembreDernière intervention26 mai 2007 4 déc. 2006 à 18:32
Et je dois inclure quoi pour que ca marche? parcke ca me met :
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(24) : error C2065: 'MEMORYSTATUSEX' : undeclared identifier
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(24) : error C2146: syntax error : missing ';' before identifier 'statex'
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(24) : error C2065: 'statex' : undeclared identifier
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(28) : error C2228: left of '.dwLength' must have class/struct/union type
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(30) : error C2065: 'GlobalMemoryStatusEx' : undeclared identifier
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(36) : error C2228: left of '.ullTotalPhys' must have class/struct/union type
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(40) : error C2228: left of '.ullAvailPhys' must have class/struct/union type
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(44) : error C2228: left of '.ullTotalPhys' must have class/struct/union type
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(44) : error C2228: left of '.ullAvailPhys' must have class/struct/union type
c:\documents and settings\joh@n\mes documents\epfl\projet de semestre\3d_visu\gestionfichier.cpp(48) : error C2228: left of '.dwMemoryLoad' must have class/struct/union type
Ca me donnera vraiment les stat que je veux? a l endroit ou j appelerai la fonction ca me dira quel classe prend tant de memoire pour tout ce qui utilise de la memoire dans mon programme?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 4 déc. 2006 à 19:38
Tu veux trouver les fuites de mémoire, ou avoir combien de mémoire utilsie ton programme. Pour la 2e solution, tu peux utiliser le gestionnaire des taches
jojomillenium
Messages postés136Date d'inscriptionsamedi 1 mai 2004StatutMembreDernière intervention26 mai 2007 4 déc. 2006 à 19:50
Je vais essayer d etre le plus precis possible:
Je regarde sur le gestionnaire des taches la memoire que mon prog utilise, mais certain truc m on l air bizzare, augmentation de la memoire annormale, ...
Alors j aimerai a un moment dans mon programme, pouvoir voir toute la memoire utilisé par mon programme et ou elle se situe, les valeurs, ...
comme ca je verrai si j ai mal deleté un element ou non.
Par exemple voir si ma class MyClass qui est un tableau d objets est deleté, ou combien d element elle comporte, et combien de place elle prend dans la memoire... j aimerai avoir une liste de tout ce qui prend de la memoire a un moment precis dans mon programme!
Vous voyez ce que je veux dire?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 5 déc. 2006 à 05:43
Tu vois des trucs bizarre dans le TaskManager! Il faut s'inquiéter généralement quand ton programme prend de plus en plus de mémoire et que c'est continuel.
Pour ce qui est de ton application, si c'est une application Windows, les chiffres sur le TaskManager ne veulent rien dire. Remarque qu'il suffit de réduire la fenêtre et la restaurer pour que ton application libère beaucoup de mémoire. En fait, pendant que l'utilisateur utilise ton application, Windows alloue de la mémoire pour des tâches de la GUI et ne la libère pas tout de suite. C'est ce que j'ai pu constater par expérience.
jojomillenium
Messages postés136Date d'inscriptionsamedi 1 mai 2004StatutMembreDernière intervention26 mai 2007 5 déc. 2006 à 11:04
C'est vrai que reduire la fenetre et la restaurer libere de la memoire, mais je desire tout de meme savoir exactement ou se trouve ma memoire!
enfin precisement qu'est ce qui utilise ma memoire et combien elle utilise !
Y a un moyen?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 5 déc. 2006 à 14:54
Pour tes erreurs de compil, je pense que tu n'as pas inclu <windows.h>, pour le reste, si a chaque allocation d'un objet de tes classes, tu insere un log dans le constructeur et le destructeur, tu verras dejà si certains objets produisent des copies non bénéfique, ou si ils ne sont pas détruit comme il faut.
Les fuites les plus courantes sont GDI (SelectObject() et deleteObject()) et partout ou tu as des new (ou malloc) sans delete (ou free)
et enfin les copies d'objets (constructeur par recopie)
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 5 déc. 2006 à 15:48
Oui, il y a la manière manuel de yann_lo_san mais pour faire automatique, à ma connaissance c'est presque impossible.
Même si tu peux avoir un hook sur les allocations et sur les libérations, tu ne seras pas en mesure de connaître le nom de la variable, ni même l'emplacement du code qui alloue. Avec le debugger de Windows (Platform SDK), y a moyen d'aller plus en profondeur mais même là, je peux rien dire (jamais essayé)
Bonne chance, ton problème est assez pointu
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 20071 11 déc. 2006 à 14:33
A mi chemin entre la torture d'un debugger et la technique du "j'men fout quand j'arette l'exe Windows fait le menage plutot bien en general...", il y a un petit truc simple à faire : encapsule les appels à malloc/free new/delete (plus complexe ici) par tes propres fonctions de gestion de la memoire.
Dans celles ci tu trace des infos du genre nombre d'appel, taille demandé, adresses retournés, demande de liberation, etc... tout ce qui peut être utile... tu log ça dans un fichier texte et ça peut déja être un premier pas vers la/les réponse(s) que tu cherche.
Le truc super drole en C++ c'est que tu peut redefinir new et delete, si t'as rien a faire et que tu veut finir ta vie à coder la nuit juste pour le fun, alors fonce petit homme.