Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Savoir ou va la memoire... [ Divers / Général ] (jojomillenium)

lundi 4 décembre 2006 à 16:31:26 | Savoir ou va la memoire...

jojomillenium

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:

if(diffMemState.Difference(oldMemState, newMemState))
    {
        TRACE( "Memory leak!\n");
        diffMemState.DumpAllObjectsSince();
    }


mais que pour les MFC et moi je travail sous visual C++ 6 win 32 sans MFC

Y a t il un moyen?

merci!

jojo

lundi 4 décembre 2006 à 17:12:20 | Re : Savoir ou va la memoire...

yann_lo_san

Tu peux utiliser une fonction du genre dans un log :
(Lever les divisions (>> 20) pour avoir en octet et faire des stats précises)

// utilisation mem en pourcentage

 

DWORD GetUtilisationMemoire()

{

             MEMORYSTATUSEX statex;

             ZeroMemory(&statex, 0);

             statex.dwLength =sizeof(MEMORYSTATUSEX);

             GlobalMemoryStatusEx(&statex);

             DWORD dw;

             // mémoire totale en Mo:

             dw = (DWORD) ((statex.ullTotalPhys >> 20) + 1);

             // mémoire disponible en Mo:

             dw = (DWORD) ((statex.ullAvailPhys >> 20) + 1);

             // mémoire utilisée en Mo:

             dw = (DWORD) ((statex.ullTotalPhys - statex.ullAvailPhys) >> 20);

             // pourcentage mem utilisée:

             return (statex.dwMemoryLoad);

}


lundi 4 décembre 2006 à 18:32:01 | Re : Savoir ou va la memoire...

jojomillenium

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?

lundi 4 décembre 2006 à 19:38:08 | Re : Savoir ou va la memoire...

vecchio56

Administrateur CodeS-SourceS
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

_____________________________________
Un éditeur de ressources gratuit pour Windows


lundi 4 décembre 2006 à 19:50:25 | Re : Savoir ou va la memoire...

jojomillenium

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?

mardi 5 décembre 2006 à 05:43:48 | Re : Savoir ou va la memoire...

badrbadr

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.

[:D] @++

mardi 5 décembre 2006 à 11:04:15 | Re : Savoir ou va la memoire...

jojomillenium

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?

mardi 5 décembre 2006 à 14:54:17 | Re : Savoir ou va la memoire...

yann_lo_san

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)


mardi 5 décembre 2006 à 15:48:44 | Re : Savoir ou va la memoire...

badrbadr

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

[:D] @++

lundi 11 décembre 2006 à 14:33:48 | Re : Savoir ou va la memoire...

hibakusha


 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.

zNoRt~!



Cette discussion est classé dans : genre, memoire, prend, diffmemstate


Répondre à ce message

Sujets en rapport avec ce message

c koi les fichiers h? [ par etmerde ] je suis débutant(mais alors là, plus nul que ça tu trouves pas), et j'ai vu dans les codes c++ des trucs du genre include (machinchose.h) ou un truc d Comment savoir le temps que prend un instruction? [ par Samoul ] Je voudrait savoir comment calculer a l'aide d'un chronomètre ou de nimporte quel autres manière le temps qye peut prendre un instruction.Ex:Timer sta Probleme fwrite en langage c [ par xavan ] Voila un programme qui doit effectue un tri externe.jai les fonctions suivante(creation pour cree le fichier principal et les fichiers auxiliaire).Le pourquoi aprés avoir fait une boucle mon textbackground prend tout l'écran ? [ par arconius ] Voila mon prog et après avoir fait une boucle mon text background prend tout l'écran si quelqu'un à une solution se serait sympa merci d'avance#includ Chaine de Char et Memoire ! [ par Soft ] Bonjour,Qq1 connait il un moyen pour charger le contenu d'un fichier (pouvant atteindre plusieurs dizaines de MO) dans un char *buffer;Car meme avec u liste des programmes en memoire !!! [ par FLOPPY ] salut tt le monde ,je charche un code en C pour recupererla liste des programmes charger en memoire ainsi que ce qu'il renvoie en cas d'erreur (ce qui problême de pointeurs (urgent) 2 [ par legrosnul ] legrosnul:) toujours aussi nul!!:)Merci Beuss pour m'avoir repondu.Cela dit ta reponse m'étonne car c'est un bout du programme qui m'a été donné a l'e pile memoire avec structure de pointeur [ par Nonobis ] slttjs avec ma calculatrice des p'titsproblemes ...ils faut que je recupere les valeurs saisies que cela soit nombre ou signe et les stock dans la pil division [ par superoi ] bonjour en fait je doit realiser une calculatrice juste avec les operateur (+ - / * %) mais qui gere de grand chiffre (des chiffre de 10 000 digit pa OU ON PREND LES LIBRAIRIES ? [ par frysa ] Je voudrais savoir ou je peux prendre les librairies opengl plus presisement les suivantes : gl/glut.h gl/gl.h ??????????


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.