Heim  >  Artikel  >  Backend-Entwicklung  >  Kann Boehms konservativer Garbage Collector in die C-Standardbibliothek für Multithread-Anwendungen integriert werden?

Kann Boehms konservativer Garbage Collector in die C-Standardbibliothek für Multithread-Anwendungen integriert werden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 16:28:30466Durchsuche

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

Integration der konservativen Garbage Collection mit der C-Standardbibliothek

Frage:

In einem Multi -threaded C-Anwendung, kann Boehms konservativer Garbage Collector (GC) effektiv in Verbindung mit der C-Standardbibliothek genutzt werden? Wie sollen insbesondere der Operator ::new und die von std::vector und std::string bereitgestellten Allokatoren gehandhabt werden?

Antwort:

1. Eine Neudefinition des Operators ::new:

Eine Neudefinition von ::operator new mit Boehms GC ist nicht erforderlich. Durch die ordnungsgemäße Verwendung von Boehms GC ist es möglich, eine explizite Neudefinition von ::operator new zu vermeiden.

2. Allokatoren für Standardbibliothekscontainer:

std::vector:

  • Verwenden Sie std::vector mit einem expliziten Allocator-Parameter, der auf Boehms gc_allocator gesetzt ist. Dadurch wird sichergestellt, dass sowohl die interne Datenstruktur als auch einzelne Elemente GC-zugeordnet sind.

std::string:

  • Zur GC-Zuweisung Wenn Sie ein internes Zeichenarray verwenden, verwenden Sie Ihre eigene benutzerdefinierte Zeichenfolgenimplementierung, die von std::basic_string abgeleitet ist, und verwenden Sie gc_allocator.
  • Es gibt keine einfache Möglichkeit, die GC_malloc_atomic-Zuweisung für das Zeichenarray in der Standardimplementierung zu erzwingen.

Beispiel:

Der folgende Code zeigt eine benutzerdefinierte Implementierung eines GC-zugewiesenen Vektors:

<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. Kompatibilität mit g:

Ja, es ist möglich, Boehm GC mit einer von g kompilierten Anwendung zu verwenden. Befolgen Sie die oben genannten Richtlinien, um GC effektiv in die Standardbibliothek zu integrieren.

Nachtrag (Januar 2017):

  • Überprüfen Sie die Vorschläge n2670 und und Garbage-Collection-Unterstützung für mögliche zukünftige Verbesserungen der Garbage-Collection-Funktionen von C .

Das obige ist der detaillierte Inhalt vonKann Boehms konservativer Garbage Collector in die C-Standardbibliothek für Multithread-Anwendungen integriert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn