Maison >développement back-end >C++ >Le garbage collector conservateur de Boehm peut-il être intégré à la bibliothèque standard C pour les applications multithread ?

Le garbage collector conservateur de Boehm peut-il être intégré à la bibliothèque standard C pour les applications multithread ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 16:28:30525parcourir

Can Boehm's Conservative Garbage Collector Be Integrated with the C   Standard Library for Multi-threaded Applications?

Intégration du garbage collection conservateur avec la bibliothèque standard C

Question :

Dans un environnement multi -threaded C, le garbage collector (GC) conservateur de Boehm peut-il être utilisé efficacement en conjonction avec la bibliothèque standard C ? Plus précisément, comment l'opérateur ::new et les allocateurs fournis par std::vector et std::string doivent-ils être gérés ?

Réponse :

1. Redéfinir l'opérateur ::new:

Redéfinir ::operator new avec le GC de Boehm n'est pas nécessaire. En utilisant correctement le GC de Boehm, il est possible d'éviter de redéfinir explicitement ::operator new.

2. Allocateurs pour les conteneurs de bibliothèque standard :

std::vector:

  • Utilisez std::vector avec un paramètre d'allocation explicite défini sur gc_allocator de Boehm. Cela garantit que la structure de données interne et les éléments individuels sont alloués par GC.

std::string:

  • Pour allouer le tableau de caractères interne, utilisez votre propre implémentation de chaîne personnalisée dérivée de std::basic_string et employez gc_allocator.
  • Il n'existe pas de moyen simple de forcer l'allocation GC_malloc_atomic pour le tableau de caractères dans l'implémentation standard.

Exemple :

Le code suivant démontre une implémentation personnalisée d'un vecteur alloué par GC :

<code class="cpp">#include <gc/gc_cpp.h>
#include <gc/gc_allocator.h>
#include <vector>

class Myvec {
  std::vector<int, gc_allocator<int>> _vec;
public:
  Myvec(size_t sz = 0) : _vec(sz) {}
  // ... (rest of class implementation)
};</code>

3. Compatibilité avec g :

Oui, il est possible d'utiliser Boehm GC avec une application compilée par g . Suivez les directives ci-dessus pour intégrer efficacement GC à la bibliothèque standard.

Addendum (janvier 2017) :

  • Vérifiez les propositions n2670 et et prise en charge du garbage collection pour les améliorations futures potentielles des capacités de garbage collection de C.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn