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

  FORUM HardWare.fr
  Programmation
  C++

  Installation Boehm GC

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Installation Boehm GC

n°1195460
samW7
Posté le 08-09-2005 à 19:35:29  profilanswer
 

Bonjour,
je voudrais utiliser le garbage collector de Boehm sur Linux avec la std. ... J'ai du zapper quelques étapes dans la compil du source car je n'arrive pas à le faire fonctionner.
Quelqu'un peut-il m'aider ?

mood
Publicité
Posté le 08-09-2005 à 19:35:29  profilanswer
 

n°1195672
Taz
bisounours-codeur
Posté le 09-09-2005 à 02:00:41  profilanswer
 

bah -I/.../machin -lmachin
 
la routine. Mais ça marche très mal avec les destructeurs, car tu n'a pas l'assurance qu'ils soient appelés.

n°1195674
samW7
Posté le 09-09-2005 à 04:50:14  profilanswer
 

Merci pour ta réponse.
Mais bon,si mon souci est d'être sûr que la mémoire soit libérée lorsque je n'utilise plus un objet, Le GC-Boehm est quand même pas mal, non ?

n°1195691
Taz
bisounours-codeur
Posté le 09-09-2005 à 08:25:14  profilanswer
 

bof. Tu utilises des smart pointer partout ? tu as viré tous tes char * ? s'il te reste la moindre gestion manuelle de la mémoire, alors t'as encore du travail.

n°1195699
samW7
Posté le 09-09-2005 à 09:02:49  profilanswer
 

je n'utilise pas de smart pointeurs. Peut-être que je devrais ...
En fait mon problème est le suivant :
j'ai une fonction que j'appelle souvent dans laquelle j'instancie un std:vector<matrice*> (matrice est une classe perso demandant beaucoup de mémoire).
D'après ce que je sais, à la sortie de la fonction, cette instance de vector est déréférencée ; mais je me rends compte que la mémoire n'est pas libérée. Donc, les smart pointeurs sont adaptés à ce cas  ?

n°1195747
blackgodde​ss
vive le troll !
Posté le 09-09-2005 à 10:19:39  profilanswer
 

absolument


---------------
-( BlackGoddess )-
n°1195782
Taz
bisounours-codeur
Posté le 09-09-2005 à 11:03:20  profilanswer
 

zieutez tous aussi les nouveaux conteneurs de boost.

n°1195901
++fab
victime du syndrome IH
Posté le 09-09-2005 à 13:40:41  profilanswer
 

Taz a écrit :

bah -I/.../machin -lmachin
 
la routine. Mais ça marche très mal avec les destructeurs, car tu n'a pas l'assurance qu'ils soient appelés.


 
comment ça marche très mal ?
A la lecture des propositions d'inclusion de GC en standard. Il m'a semblé lire qu'aucun destructeur non trivial n'était appelé lorsqu'un objet alloué dynamiquement n'était plus référencé.
L'operateur delete garderait (malheureusement ?) un sens puisqu'il permettrait d'invoquer le destructeur.
Est-ce que le boehm est fait dans cette optique ? il me semble que oui, mais je ne l'ai pas essayé ...

n°1217205
Taz
bisounours-codeur
Posté le 07-10-2005 à 02:26:27  profilanswer
 

bah ça fout en l'air le style RAII C++. Donc ça sert à rien.

n°1217240
blackgodde​ss
vive le troll !
Posté le 07-10-2005 à 09:09:08  profilanswer
 

ca sert a quoi d'etre obligé d'utiliser delete sur un objet pour en appeler le destructeur, pour ensuite laisser sa mémoire en vrac pour le GC ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 07-10-2005 à 09:09:08  profilanswer
 

n°1218006
el muchach​o
Comfortably Numb
Posté le 07-10-2005 à 19:24:14  profilanswer
 

samW7 a écrit :

je n'utilise pas de smart pointeurs. Peut-être que je devrais ...
En fait mon problème est le suivant :
j'ai une fonction que j'appelle souvent dans laquelle j'instancie un std:vector<matrice*> (matrice est une classe perso demandant beaucoup de mémoire).
D'après ce que je sais, à la sortie de la fonction, cette instance de vector est déréférencée ; mais je me rends compte que la mémoire n'est pas libérée. Donc, les smart pointeurs sont adaptés à ce cas  ?


 
Si c'est ca ton pb, alors il te faut suivre le conseil de Taz : les matrices de Boost (par exemple), car ta classe matrice est probablement  mal concue. Un GC ou meme des smart pointers ne le resolveront pas.


Message édité par el muchacho le 07-10-2005 à 19:27:03
n°1218463
++fab
victime du syndrome IH
Posté le 08-10-2005 à 20:22:27  profilanswer
 

blackgoddess a écrit :

ca sert a quoi d'etre obligé d'utiliser delete sur un objet pour en appeler le destructeur, pour ensuite laisser sa mémoire en vrac pour le GC ?


 
tu donnes toi meme la réponse à ta question. delete invoque le destructeur, mais ne désalloue pas. Cette dernière tache est confiée au GC.

n°1218486
++fab
victime du syndrome IH
Posté le 08-10-2005 à 21:48:27  profilanswer
 

Taz a écrit :

bah ça fout en l'air le style RAII C++. Donc ça sert à rien.


Je viens de l'essayer, et j'en suis très agréablement surpris.
ça fout pas le style RAII en l'air. Pour se servir du GC pour une classe donnée, la seule chose à faire est de masquer ::new , ::new[], ::delete, et ::delete[], en héritant publiquement de gc par exemple.  
Apres, tout est comme avant, on appelle toujours delete, sauf que secretement, la gestion de la mémoire n'est plus controlée par le programmeur, et il n'y a plus de fuites, tout au plus des absences d'appel de destructeur.
 
D'ailleurs au niveau perf, c'est pas catastrophique du tout. C'est meilleur que boost::shared_ptr<> dans pas mal de situation, notament dans le cas de petits objets, et dans les contextes multithreads.
 
La seule chose qui est bizarre, c'est que la classe gc ne soit pas dans un namespace, c'est hallucinant.

n°1218491
Taz
bisounours-codeur
Posté le 08-10-2005 à 21:58:47  profilanswer
 

sauf qu'un destructeur, ça n'est pas qu'une histoire de mémoire.
 
(sinon je l'ai déjà essayé, et l'intégration C++ est bidon quand même).

n°1218528
++fab
victime du syndrome IH
Posté le 08-10-2005 à 22:50:40  profilanswer
 

Taz a écrit :

sauf qu'un destructeur, ça n'est pas qu'une histoire de mémoire.


entièrement d'accord. Je pense que ce n'est pas parce qu'on utilise le boehm que l'on est exempté d'appel au destructeur.
Comme tu le dis, la mémoire n'est pas la seule ressource que peut acquérir un objet.
 

Citation :

(sinon je l'ai déjà essayé, et l'intégration C++ est bidon quand même).


Comment veux-tu faire autrement ? Tu sais bien que operator new et consorts ne peuvent etre surchargés qu'en tant que membre statique.


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

  Installation Boehm GC

 

Sujets relatifs
[Access] impossible d'utiliser access après son installation!Erreur lors de l'installation d'un wiki
Installation automatique à partir d'un cd sur un PCinstallation de java
Installation de QT 4.0 Open Source sous WindowsInstallation d'un script de commentaire "ACGV" pb de path
Problème d'installation JBuilder Xcd d installation d une appli
installation librarie GD ?Installation automatique des polices ?
Plus de sujets relatifs à : Installation Boehm GC


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