Utilisation du garbage collector de Boehm avec la bibliothèque standard C
Lors du développement d'applications C multithread, le garbage collector conservateur de Boehm peut être utile pour simplifier la mémoire gestion. Cela soulève la question de savoir comment intégrer Boehm GC aux classes de la bibliothèque standard C comme std::map et std::vector.
Une approche consiste à redéfinir l'opérateur global ::new pour utiliser l'implémentation de Boehm. Cependant, une solution plus simple consiste à spécifier explicitement l'argument du modèle d'allocateur dans les modèles de collection de bibliothèque standard.
Par exemple, pour allouer par GC un vecteur d'entiers, on peut utiliser :
<code class="cpp">std::vector<int, gc_allocator<int>> my_vector;</code>
Le deuxième argument de modèle dans std::vector est utilisé pour contrôler l'allocation de la structure de données interne du vecteur, pas les éléments individuels.
Pour std::string, utiliser Basic_string avec gc_allocator est une option :
<code class="cpp">std::basic_string<char, std::char_traits<char>, gc_allocator<char>> my_string;</code>
Alternativement, on peut fournir le tableau de caractères directement avec GC_malloc_atomic.
En résumé, utiliser Boehm GC avec std :: vector, std :: string et d'autres classes de bibliothèque standard est possible en spécifiant l’argument de modèle gc_allocator. Redéfinir l'opérateur ::new n'est pas nécessaire.
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!