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

  FORUM HardWare.fr
  Programmation
  C++

  C++ et GC ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ et GC ?

n°1067453
blackgodde​ss
vive le troll !
Posté le 01-05-2005 à 02:51:18  profilanswer
 

Bonjour,
 
que pensez-vous de l'utilisation d'un garbage collector en C++ ?
j'ai lu un peu de doc sur celui ci : http://www.hpl.hp.com/personal/Hans_Boehm/gc/
apparement, il serait assez compliqué de le faire interagir avec la stl par exemple ...
 
pour vous, est-ce uniquement une solution de facilité, ou cela peut-il avoir aussi des avantages comme l'ecriture de code plus robuste avec moins de prises de tete ?
on peut peut-être aussi le comparer à l'utilisation de shared_ptr et consors de boost ?
 
Merci pour vos réponses :)


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 01-05-2005 à 02:51:18  profilanswer
 

n°1067673
++fab
victime du syndrome IH
Posté le 01-05-2005 à 15:28:07  profilanswer
 

blackgoddess a écrit :

Bonjour,
 
que pensez-vous de l'utilisation d'un garbage collector en C++ ?
j'ai lu un peu de doc sur celui ci : http://www.hpl.hp.com/personal/Hans_Boehm/gc/
apparement, il serait assez compliqué de le faire interagir avec la stl par exemple ...


 
L'interface proposé n'est guère convaincante ...
 

Citation :

pour vous, est-ce uniquement une solution de facilité, ou cela peut-il avoir aussi des avantages comme l'ecriture de code plus robuste avec moins de prises de tete ?
on peut peut-être aussi le comparer à l'utilisation de shared_ptr et consors de boost ?


 
Je ne pense pas que ce soit une solution de facilité, on peut arriver à écrire du code ou on se noie complètement dans la gestion de la mémoire, et ça peut etre bien pratique.
boost::shared_ptr est une solution, mais elle ne tient pas compte des références cycliques qui peuvent intervenir. Heureusement, boost::weak_ptr arrive à la rescousse.
 
Exemple :
 

Code :
  1. #include <boost/shared_ptr.hpp>
  2. #include <boost/weak_ptr.hpp>
  3. #include <iostream>
  4. namespace {
  5.     struct Foo
  6.     {
  7.     Foo() {std::cout << "Constructeur de Foo\n";}
  8.     ~Foo() {std::cout << "Destructeur de Foo\n";}
  9.     void next(const boost::shared_ptr<Foo>&  p) { ptr = p; }
  10.     private:
  11.     boost::weak_ptr<Foo> ptr;
  12.     // boost::shared_ptr<Foo> ptr; // ne liberera pas correctement la mémoire
  13.     };
  14. }
  15. int main()
  16. {
  17.     boost::shared_ptr<Foo> p1(new Foo());
  18.     boost::shared_ptr<Foo> p2(new Foo());
  19.     p1->next(p2);
  20.     p2->next(p1); // référence cyclique
  21. }


 
L'avantage de cette solution par rapport au GC, c'est qu'on peut savoir quand est appelé le destructeur.
 
peut etre que d'autres peuvent parler de __gc que je ne connais guère et qui à l'air bien merdique.
 
 
 
 
 
 
 
 
 

n°1067691
push
/dev/random
Posté le 01-05-2005 à 15:51:09  profilanswer
 

[:pcgamer]  
 
moi je manque un peu de recul, qu'est-ce que pourrait apporter un gc par rapport à une utilisation de boost::shared_ptr/boost::weak_ptr ? à première vue je vois plustôt des inconvénients mais je manque peut-être l'essentiel ?

n°1067697
++fab
victime du syndrome IH
Posté le 01-05-2005 à 15:57:28  profilanswer
 

ça demande de ne pas se vautrer dans la distribution des roles boost::shared_ptr et boost::weak_ptr ...

n°1067773
++fab
victime du syndrome IH
Posté le 01-05-2005 à 17:38:18  profilanswer
 

sigmatador a écrit :

p-e pas si merdique au vu des projets qui l'utilise (meme si je ne suis pas fan du concept de garbage collector)


 
Tiens, j'ai vu que Mozilla l'utilisait. Bizarre, le 1.7.5 me bouffe toute ma mémoire en 4-5 jours :(

n°1067787
Taz
bisounours-codeur
Posté le 01-05-2005 à 18:18:05  profilanswer
 

mozilla c'est de la merde. ça leak, ça fragmente, ça leak serveur X, ça pue.
 
Pour le GC, c'est cool, sauf qu'il sens mauvais le C ou le Java, bref il appelle pas forcément ton destructeur ...

n°1067812
++fab
victime du syndrome IH
Posté le 01-05-2005 à 18:44:07  profilanswer
 

Taz a écrit :

mozilla c'est de la merde. ça leak, ça fragmente, ça leak serveur X, ça pue.


 [:dimebag darrell]

n°1068065
HelloWorld
Salut tout le monde!
Posté le 01-05-2005 à 21:36:17  profilanswer
 

Y'a pas que la gestion auto de la durée de vie des objets dans un GC. Ce que j'aimerai bien tester, c'est la différence du coût de l'allocation des objets au fil de l'exécution. Je pense que l'allocation d'un GC doit être plus performante, grâce à moins de fragmentation. Il faut se gérer des pool en C++ pour arriver à quelque chose d'équivalent je suppose. Moi j'aimerai bien des smart ptr qui en interne gèrent un pool spécifique à chaque type d'objet alloué.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1068067
Taz
bisounours-codeur
Posté le 01-05-2005 à 21:36:58  profilanswer
 

euh le boehm, je sais pas s'il compacte alors ...

n°1068257
Kristoph
Posté le 02-05-2005 à 00:03:24  profilanswer
 

de toute façon, les GC performants ne sauront jamais appeler les destructeurs correctement :D
 
Sinon, bohem à un très bon usage qui ne pourri pas les perfs : c'est un detecteur de memory leak a utiliser dans du code de debug. Je crois que c'est comme ça que mozilla l'utilise

mood
Publicité
Posté le 02-05-2005 à 00:03:24  profilanswer
 

n°1068259
Taz
bisounours-codeur
Posté le 02-05-2005 à 00:05:08  profilanswer
 

exacte.

n°1068260
el muchach​o
Comfortably Numb
Posté le 02-05-2005 à 00:07:05  profilanswer
 

Si tu veux du C objet avec un GC, il faut faire de l'Objective C.

n°1068761
HelloWorld
Salut tout le monde!
Posté le 02-05-2005 à 14:18:25  profilanswer
 

Pour __gc c'est managed C++, .Net quoi. C'est comme ça que tu déclares (déclarais) ta classe / variable comme étant un type managé. En lui même c'est pas merdique, c'est réellement garbage collecté. Ce qui est merdique c'est la syntaxe qui est lourde, plus l'ambiguite à savoir si un objet est managé ou non (les 2 utilisent new, faut aller lire le .h pour trouver ou non le __gc et être fixé).
Dans C++ CLI ils ont revu ça, en distinguant les objets natifs (new) des managés (gcnew).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1068827
nraynaud
lol
Posté le 02-05-2005 à 14:45:44  profilanswer
 

Taz a écrit :

euh le boehm, je sais pas s'il compacte alors ...


les GCs conservatifs ne compactent *jamais*, c'est exactement pour ça qu'on les dit conservatifs.


---------------
trainoo.com, c'est fini
n°1068854
Taz
bisounours-codeur
Posté le 02-05-2005 à 15:09:10  profilanswer
 

voui, me suis mal exprimé. Je voulais être ironiqe :tacle à la gorge:

n°1070170
blackgodde​ss
vive le troll !
Posté le 03-05-2005 à 11:30:12  profilanswer
 

Vous auriez d'autres GC en tête utilisables en C++ ? pour pouvoir les comparer entre eux :)
 
Merci :)


---------------
-( BlackGoddess )-

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

  C++ et GC ?

 

Sujets relatifs
Plus de sujets relatifs à : C++ et GC ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)