70 votes

La collecte des ordures Bibliothèques en C++

Ce gratuits et commerciaux de collecte des ordures bibliothèques sont disponibles pour le C++, et quels sont les avantages et les inconvénients de chacun?

Je suis intéressé par des leçons durement de l'utilisation réelle sur le terrain, pas de marketing ou de promotion de blurb.

Il n'est pas nécessaire de donner des précisions sur l'habitude des échanges automatique de collecte des ordures, mais s'il vous plaît n'oubliez pas de mentionner les algorithmes utilisés (comptage de référence, la marque et le balayage, les différentiels, etc.) et résumez brièvement les conséquences.

31voto

Greg Hewgill Points 356191

J'ai utilisé les Boehm collecteur dans le passé avec succès. Il est open source et peut être utilisé dans les logiciels commerciaux.

C'est un conservateur collecteur, et a une longue histoire de développement par l'un des chercheurs les plus réputés dans la collecte des ordures de la technologie.

23voto

Tom Leys Points 10453

Boost a une grande gamme de pointeurs intelligents qui impliment de comptage de référence ou supprimez-sur-le-champ à la sortie ou intrusif de comptage de référence. Celles-ci ont révélé suffisant pour nos besoins. Un grand plus est qu'il est gratuit, open source, basé sur un modèle de C++. parce que c'est le comptage de référence, dans la plupart des cas, il est fortement déterministe lorsqu'un objet est détruit.

10voto

Pieter Points 9200

L'Boehm garbage collector est disponible gratuitement, et soi-disant plutôt bonne (pas de première main l'expérience moi-même)

([PDF AVERTISSEMENT]papier Théorique à propos de C++0x proposition de Boehm garbage collector)

Il a été dit de faire de C++0x , mais ne le fera pas après tout (en raison de contraintes de temps, je suppose).

Proprosal N2670 (un minimum de soutien pour les ramasseurs d'ordures) a approuvé, en juin 2008, cependant, de sorte que le compilateur implémentations ramasser sur ce, et la norme soit finalisé, la collecte des ordures monde pour le C++ est sûr de le changer...

10voto

Paul Biggar Points 7108

J'utilise boehm-gc beaucoup. Il est simple à utiliser, mais la documentation est vraiment pauvre. Il y a une page C++, mais son assez difficile à trouver.

Fondamentalement, assurez-vous simplement que chaque classe hérite de sa classe de base, et que tu passes toujours gc_allocator à un conteneur. Dans un certain nombre de cas, vous souhaitez utiliser libgccpp pour attraper d'autres utilisations de new et delete. Ces sont en grande partie des changements de haut niveau, et nous constatons que nous pouvons désactiver la GC au moment de la compilation à l'aide d'un #ifdef, et que le soutien de ceci affecte seulement un ou deux fichiers.

Mon problème majeur c'est que vous ne pouvez plus utiliser Valgrind, à moins que vous tournez le collecteur d'abord. Tout en tournant le collecteur off est facile à faire et ne nécessite pas de recompilation, il est évidemment impossible de l'utiliser si vous commencez à manquer de mémoire.

2voto

larsivi Points 1298

Le seul que je connaisse est Boehm, qui au fond est une marque traditionnelle et de balayage. Probablement qu'elle utilise différentes techniques pour optimiser cela, mais généralement progressive et générationnelle/compactage GC va être difficile de créer, pour le C++ sans passer pour un gérés sous-ensemble tel que ce que vous pouvez obtenir avec .Net C++. Certaines des approches qui doit déplacer les pointeurs peuvent être mises en œuvre avec prise en charge du compilateur pour l'épinglage de pointeurs ou de lire/écrire les blocs, mais l'effet sur les performances peut être trop grand, et il n'est pas nécessairement non négligeable des modifications à la GC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X