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

  FORUM HardWare.fr
  Programmation
  C++

  Boehm Garbage Collector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boehm Garbage Collector

n°386835
kadreg
profil: Utilisateur
Posté le 08-05-2003 à 10:12:46  profilanswer
 

Je suis en train de faire des essais avec le Boehm Garbage Collector. Voici mon petit programme de test :  
 
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. /* garbage collector */
  4. #include <gc/gc_cpp.h>
  5. using namespace std;
  6. class Personne {
  7.   int id;
  8.   string _nom;
  9.   string _prenom;
  10. public:
  11.   Personne (const string &n, const string &p):_nom(n), _prenom(p) {
  12.     cout<<"creating "<<_prenom<<" "<<_nom<<endl;
  13.   }
  14.   virtual ~Personne () {
  15.     cleanup ();
  16.   }
  17.   void cleanup () {
  18.     cout<<"deleting "<<_prenom<<" "<<_nom<<endl;
  19.   }
  20. };
  21. void fonction_locale () {
  22.   Personne p4 ("Thomas", "Edison" );
  23.   Personne *p5 = new (GC) Personne ("Lapin", "Malin" );
  24. }
  25. int main (int argc, char **argv) {
  26.   cout<<"start..."<<endl;
  27.   Personne *p1 = new (GC) Personne ("Einstein", "Albert" );
  28.   Personne *p2 = new (GC) Personne ("Boer", "Hans" );
  29.   delete p2;
  30.   cout << "appel locale"<<endl;
  31.   fonction_locale ();
  32.   cout << "quitting locale"<<endl;
  33.   cout<<"end!"<<endl;
  34. }

 
 
Je vois bien passer les création d'objets, mais pas les passages dans les destructeurs des objets non détruits explicitement ou par les effets de pile. J'ai bien tenter de faire dériver ma classe de gc_cleanup, mais ça ne change rien. Comment faire pour que le destructeur soit appelé lorsque le GC détruit un objet ?  
 
PS : mes objets doivent tout de même être bien détruit, puisque j'ai pas de fuites mémoires selon valgrind.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 08-05-2003 à 10:12:46  profilanswer
 

n°386841
skeye
Posté le 08-05-2003 à 10:20:42  profilanswer
 

Je dis peut-etre une connerie, mais le garbage collector se contente p-e de marquer les zones mémoire utilisées et de les libérer tout seul comme un grand qd elles ne sont plus utilisées, non?
Tout cela sans passer par le destructeur...

n°386844
kadreg
profil: Utilisateur
Posté le 08-05-2003 à 10:23:55  profilanswer
 

skeye a écrit :

Je dis peut-etre une connerie, mais le garbage collector se contente p-e de marquer les zones mémoire utilisées et de les libérer tout seul comme un grand qd elles ne sont plus utilisées, non?
Tout cela sans passer par le destructeur...


 
C'est ce que je pensais au début, mais j'ai trouvé ça dans la doc qui me laisse penser que c'est possible :  
 
 

A collectable object may have a clean-up function, which will be
invoked when the collector discovers the object to be inaccessible.
An object derived from "gc_cleanup" or containing a member derived
from "gc_cleanup" has a default clean-up function that invokes the
object's destructors.


Message édité par kadreg le 08-05-2003 à 10:24:13

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°386848
skeye
Posté le 08-05-2003 à 10:28:13  profilanswer
 

et ta fonciton cleanup tu as essayé de l'appeler clean-up comme dans la doc? :??:

n°386851
kadreg
profil: Utilisateur
Posté le 08-05-2003 à 10:30:28  profilanswer
 

skeye a écrit :

et ta fonciton cleanup tu as essayé de l'appeler clean-up comme dans la doc? :??:  


 
le - dans un nom de fonction, il va pas apprécier le compilateur :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°386853
Taz
bisounours-codeur
Posté le 08-05-2003 à 10:31:42  profilanswer
 

il me semble que dans la doc, il dise qu'il faut faire heriter tes objets de gc
 
 
 

[benoit@benserver C++]$ g++ -Wall -ansi -pedantic -lgc gc.cpp
gc.cpp: Dans la fonction « void fonction_locale() »:
gc.cpp:30: AVERTISSEMENT: variable inutilisée « Personne*p5 »
gc.cpp: Dans la fonction « int main(int, char**) »:
gc.cpp:35: AVERTISSEMENT: variable inutilisée « Personne*p1 »
[benoit@benserver C++]$ ./a.out  
start...
creating Albert Einstein
creating Hans Boer
deleting Hans Boer
appel locale
creating Edison Thomas
creating Malin Lapin
deleting Edison Thomas
quitting locale
end!


Message édité par Taz le 08-05-2003 à 10:41:00
n°386855
skeye
Posté le 08-05-2003 à 10:32:54  profilanswer
 

kadreg a écrit :


 
le - dans un nom de fonction, il va pas apprécier le compilateur :o


bonne remarque! :ange:  
Faudra que je pense à chercher de la doc là-dessus, ca m'intéresse pas mal...

n°386856
kadreg
profil: Utilisateur
Posté le 08-05-2003 à 10:33:15  profilanswer
 

++Taz a écrit :

il me semble que dans la doc, il dise qu'il faut faire heriter tes objets de gc


 
Bah là, je le fait hériter de gc_cleanup, qui lui même hérite de gc , et c'est le même comportement [:spamafote]


Message édité par kadreg le 08-05-2003 à 10:33:39

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°386924
Taz
bisounours-codeur
Posté le 08-05-2003 à 11:43:38  profilanswer
 

An object derived from "gc_cleanup" or containing a member derived
from "gc_cleanup" has a default clean-up function that invokes the
object's destructors.

n°408278
Taz
bisounours-codeur
Posté le 26-05-2003 à 17:27:38  profilanswer
 

UP!


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

  Boehm Garbage Collector

 

Sujets relatifs
Hans_Boehm gc: cherche doc--LIBERATION MEMOIRE-- Garbage collector
Différents types de Garbage Collectors[Java]Comment desactiver le garbage collector ?
[JAVA] garbage collector 
Plus de sujets relatifs à : Boehm Garbage Collector


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