Verwendung von Boehm Garbage Collector mit C-Standardbibliothek
Um eine Multithread-C-Anwendung zu entwickeln, die Boehms konservativen Garbage Collector nutzt, gibt es Es gibt mehrere Ansätze, die in Betracht gezogen werden sollten:
1. Neudefinition des Operators ::new:
Eine Möglichkeit besteht darin, den globalen Operator ::new als Boehms Version neu zu definieren. Dieser Ansatz kann jedoch andere Bibliothekskomponenten beeinträchtigen und wird im Allgemeinen nicht empfohlen.
2. Verwendung expliziter Allokatoren:
Alternativ können Sie Boehms gc_allocator-Vorlage mit den STL-Sammlungsklassen verwenden. Ein expliziter Allokator kann den für die Zuweisung zu verwendenden Speichermanager angeben und so sicherstellen, dass sowohl die internen Daten als auch einzelne Elemente von STL-Containern GC-zugeteilt werden.
3. Erstellen benutzerdefinierter Sammlungen:
Für eine individuellere Lösung erstellen Sie benutzerdefinierte Sammlungen basierend auf den STL-Vorlagenklassen, verwenden Sie jedoch gc_allocator als Allocator-Vorlagenargument. Dadurch können Sie die internen Arrays von STL-Containern, wie z. B. std::string, mithilfe der GC_malloc_atomic-Funktion von Boehm zuweisen.
4. Überlegungen zu std::string:
Um die internen Daten von std::string per GC zuzuordnen, können Sie mithilfe der Vorlage „basic_string“ mit gc_allocator Ihre eigene Zeichenfolge definieren. Durch Überschreiben des Operators [] können Sie auf den internen Zeichenpuffer zugreifen und ihn mit GC_malloc_atomic zuweisen.
5. Mögliche Probleme mit g:
Obwohl Boehms GC im Laufe der Zeit eine verbesserte Stabilität aufweist, wird er möglicherweise immer noch nicht für die Verwendung in einer komplexen, von g kompilierten Anwendung empfohlen. Das bereitgestellte Beispiel (myvec.cc), das den gc_allocator verwendet, wird jedoch erfolgreich kompiliert, ohne einfaches malloc oder ::operator new zu verwenden.
Zusätzliche Hinweise:
Die Der C 11-Standard unterstützt die Speicherbereinigung durch
Das obige ist der detaillierte Inhalt vonWie kann ich Boehms Garbage Collector mit der C-Standardbibliothek verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!