Boehm Garbage Collector

Boehm Garbage Collector - C++ - Programmation

Marsh Posté le 08-05-2003 à 10:12:46    

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 !
Reply

Marsh Posté le 08-05-2003 à 10:12:46   

Reply

Marsh Posté le 08-05-2003 à 10:20:42    

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...

Reply

Marsh Posté le 08-05-2003 à 10:23:55    

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 !
Reply

Marsh Posté le 08-05-2003 à 10:28:13    

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

Reply

Marsh Posté le 08-05-2003 à 10:30:28    

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 !
Reply

Marsh Posté le 08-05-2003 à 10:31:42    

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
Reply

Marsh Posté le 08-05-2003 à 10:32:54    

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...

Reply

Marsh Posté le 08-05-2003 à 10:33:15    

++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 !
Reply

Marsh Posté le 08-05-2003 à 11:43:38    

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.

Reply

Marsh Posté le 26-05-2003 à 17:27:38    

UP!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed