Ch Classes (libres voire gratuites) gérant les fuites mémoires

Le
J-C.gibier
Bonjour,
J'ai cherché (un peu mais à tout les coups je suis passé au travers)
dans la faq pour voir s'il n'y avait pas de références pour ce problème
récurrent.
Je cherche précisément un classe (ou un recette, ou un listing) pas trop
lourde simple à implémenter, n'ayant pas de contrindications avec Builder
pour sauver quelques heures de travail (et quelques cheveux) sur un projet.

Merci
JCG
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Matthieu Moy
Le #722677
"J-C.gibier"
Bonjour,


Bonjour,

J'ai cherché (un peu mais à tout les coups je suis passé au travers)
dans la faq pour voir s'il n'y avait pas de références pour ce problème
récurrent.


Je ne sais pas ce que tu entends par « gérer » les fuites de mémoire,
mais le programme Valgrind réponds peut-être à ta question.

--
Matthieu

J-C.gibier
Le #722676
"Matthieu Moy" de news:
"J-C.gibier"
Bonjour,



Je ne sais pas ce que tu entends par « gérer » les fuites de mémoire,
mais le programme Valgrind réponds peut-être à ta question.



C'est vrai c'est un mot valise à la con, je voulais bien sûr dire :
supprimer, éradiquer ou exterminer ;-)
Ceci dit la home page indique :Valgrind is a GPL'd system for debugging and
profiling x86-Linux programs.
J'avais précisé dans mes doléances 'compatible avec Builder C++'. C'est peut
être facilement portable mais sans confirmation je ne m'y risquerais pas.

Thx


damien gautherin
Le #722675
J'avais précisé dans mes doléances 'compatible avec Builder C++'. C'est peut
être facilement portable mais sans confirmation je ne m'y risquerais pas.


Bonjour,

memproof et MemorySleuth font ce genre de chose
A+
Damien

Pierre Maurette
Le #722674
"J-C.gibier"

"Matthieu Moy" de news:
"J-C.gibier"
Bonjour,



Je ne sais pas ce que tu entends par « gérer » les fuites de mémoire,
mais le programme Valgrind réponds peut-être à ta question.



C'est vrai c'est un mot valise à la con, je voulais bien sûr dire :
supprimer, éradiquer ou exterminer ;-)
Ceci dit la home page indique :Valgrind is a GPL'd system for debugging and
profiling x86-Linux programs.
J'avais précisé dans mes doléances 'compatible avec Builder C++'. C'est peut
être facilement portable mais sans confirmation je ne m'y risquerais pas.
Pourquoi n'utilisez-vous pas Codeguard, intégré dans C++Builder ?

Il signale les fuites et situe leur origine.
--
Pierre



J-C.gibier
Le #722673
"Pierre Maurette" news:
"J-C.gibier"
Pourquoi n'utilisez-vous pas Codeguard, intégré dans C++Builder ?
Il signale les fuites et situe leur origine.


Codeguard indique effectivement (mais pas toujours) la ligne de l'allocation
non libérée mais avec les boucles, les récursion ou les méthodes imbriquées,
l'indication de la ligne fautive ne suffit plus. On en vient vite à
rechercher d'autres solutions qui précisent le contexte dans lequel
l'allocation à eut lieu.
Si je parviens à customiser la classe de façon à enregistrer des éléments de
contexte, le débuggage sera plus rapide (enfin j'espère:-).

J-C.gibier
Le #722672
"damien gautherin" news:c6odam$kln$


memproof et MemorySleuth font ce genre de chose


Je regarde ça.
Merci.

kanze
Le #722385
"J-C.gibier" news:
"Pierre Maurette" message de news:

"J-C.gibier"
Pourquoi n'utilisez-vous pas Codeguard, intégré dans C++Builder ?
Il signale les fuites et situe leur origine.


Codeguard indique effectivement (mais pas toujours) la ligne de
l'allocation non libérée mais avec les boucles, les récursion ou les
méthodes imbriquées, l'indication de la ligne fautive ne suffit
plus. On en vient vite à rechercher d'autres solutions qui précisent
le contexte dans lequel l'allocation à eut lieu.


Je doute qu'il y ait un programme qui afficherait la ligne de code où tu
aurais du libérer la mémoire. Le mieux qu'on peut espérer, c'est bien
les informations sur où la mémoire a été allouée. Chez moi, il y a
GB_MemoryCheck, qui peut afficher la trace de la pile au moment de
l'allocation. Je développe actuellement sur Sparc, mais il y a aussi des
versions pour Linux sur Intel à ma site. A priori, une porte vers
Windows ne doit pas être trop difficile. (J'ai de nouveau accès à une
machine Windows ; c'est donc prévu de ma part. Mais je ne sais pas
quand. Mon client est toujours plus intéressé par ce que je fais sur
Sparc, voire sous Linux.)

Si je parviens à customiser la classe de façon à enregistrer des
éléments de contexte, le débuggage sera plus rapide (enfin
j'espère:-).


Il y a deux problèmes à résoudre : comment saisir le contexte sur la
pile, et comment l'interpréter. Pour le premier, il n'y a pas de
solution portable, et il se peut que même avec la version Linux sur
Intel, il faudrait rétoucher le fichier StackTrace.mcc (où se trouve le
code qui rémonte la pile en sauvegardant les adresses de rétour).

Quant à l'interprétation : pour l'instant, je n'ai pas cherché loin. Je
sors les adresses en hexadécimal, et quand j'en ai besoin, je tire un
« map » (sous Unix, avec la commande nm, mais si je me rappelle bien,
sous Windows, il faut le démander à l'éditeur de liens). En principe, on
doit pouvoir trouver ce genre d'information dans les informations de
déboggage de l'executable, mais c'est pas mal du boulot, et dans la
pratique, je n'en ai besoin qu'une ou deux fois par an, maximum.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


J-C.gibier
Le #722381
news:
"J-C.gibier" news:
"Pierre Maurette" message de news:

"J-C.gibier"
Pourquoi n'utilisez-vous pas Codeguard, intégré dans C++Builder ?
Il signale les fuites et situe leur origine.


Codeguard indique effectivement (mais pas toujours) la ligne de
l'allocation non libérée mais avec les boucles, les récursion ou les
méthodes imbriquées, l'indication de la ligne fautive ne suffit
plus. On en vient vite à rechercher d'autres solutions qui précisent
le contexte dans lequel l'allocation à eut lieu.


Je doute qu'il y ait un programme qui afficherait la ligne de code où tu
aurais du libérer la mémoire. Le mieux qu'on peut espérer, c'est bien
les informations sur où la mémoire a été allouée. Chez moi, il y a
GB_MemoryCheck, qui peut afficher la trace de la pile au moment de
l'allocation. Je développe actuellement sur Sparc, mais il y a aussi des
versions pour Linux sur Intel à ma site. A priori, une porte vers
Windows ne doit pas être trop difficile. (J'ai de nouveau accès à une
machine Windows ; c'est donc prévu de ma part. Mais je ne sais pas
quand. Mon client est toujours plus intéressé par ce que je fais sur
Sparc, voire sous Linux.)


[...]

Intéressant, mais je ne sais pas si j'aurai la carure requise pour
travailler sur cette classe ;-)
Lorsque je parlais de contexte je voulais pas parler du contexte de pile
mais simplement d'une mémorisation de certaines variables du programme,
chose que ne peut faire Codeguard (pour autant que je sache). Ceci dit si
les sources sont disponibles et qu'il y a matière à contribuer ne serait ce
qu'en testant je le ferais avec plaisir.

JCG



Mathieu Roger
Le #746471

Bonjour,
J'ai cherché (un peu mais à tout les coups je suis passé au travers)
dans la faq pour voir s'il n'y avait pas de références pour ce problème
récurrent.
Je cherche précisément un classe (ou un recette, ou un listing) pas trop
lourde simple à implémenter, n'ayant pas de contrindications avec Builder
pour sauver quelques heures de travail (et quelques cheveux) sur un projet.

Merci
JCG




regardez dans http://www.philippe.prados.name/ il y a des classes de
pointeurs de composition qui permettent de gérer la mémoire de manière
très élégante

kanze
Le #745649
Mathieu Roger news:
J'ai cherché (un peu mais à tout les coups je suis passé au
travers) dans la faq pour voir s'il n'y avait pas de références pour
ce problème récurrent.

Je cherche précisément un classe (ou un recette, ou un listing) pas
trop lourde simple à implémenter, n'ayant pas de contrindications
avec Builder pour sauver quelques heures de travail (et quelques
cheveux) sur un projet.


regardez dans http://www.philippe.prados.name/ il y a des classes de
pointeurs de composition qui permettent de gérer la mémoire de manière
très élégante


Tiens, il te paie pour faire de la pub.

J'y ai jeté un coup d'oeil ; ce n'est pas terrible. Si c'est vrai qu'il
y en a pire, j'ai quand même relevé plusieurs erreurs de C++, ce qui ne
s'excuse pas dans une site dont la vocation est d'enseigner le C++. Et
certaines de ses solutions de conception sont pour le moins douteuses.

Je n'ai pas trouvé les pointeurs dont tu parles, mais s'il s'agit des
pointeurs intelligents au comptage de référence, il faut d'abord
régarder de côté de Boost, et sinon, utiliser plus ou moins ce que
décrit Scott Meyers. (J'ai une implémentation de ce que décrit Scott
Meyers sur mon site. Mais comme j'ai dit, c'est surtout intéressant pour
le cas où tu ne peux pas te servir de Boost.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Publicité
Poster une réponse
Anonyme