Boehm garbage collector

Boehm -Demers -Willeiser -Müllsammler
Andere Namen Bdwgc
Originalautor (en) Hans-Juergen Boehm
Entwickler (en) Ivan Maidanski et al.
Erstveröffentlichung 1988; Vor 34 Jahren
Stabile Version
8.0.6 / 28. September 2021; vor 10 Monaten
Vorschau -Version
8.2.0 / 29. September 2021; vor 10 Monaten
Repository
Geschrieben in C
Typ Müllsammler
Lizenz ähnlich zu X11 (gratis Software)
Webseite www.hboehm.die Info/gc/ Edit this at Wikidata

Das Boehm -Demers -Willeiser -Müllsammleroft einfach als einfach bekannt als Boehm GC, ist ein konservativ Müllsammler zum C und C ++[1] entwickelt von Hans Boehm, Alan Demers und Mark Weiser.[2][3]

Boehm GC ist gratis Software unter a verteilt Zulässige freie Softwarelizenz ähnlich wie X11 Lizenz. Das erste Papier, das diesen Sammler vorstellte, erschien 1992. [4]

Entwurf

Hans Boehm beschreibt den Betrieb des Sammlers wie folgt:

Der Sammler verwendet einen Mark-Sweep-Algorithmus. Es bietet eine inkrementelle und generationsübergreifende Sammlung unter Betriebssystemen, die die richtige Art von virtueller Speicherunterstützung bieten. (Derzeit umfasst dies Sunos [45], IRIX, OSF/1, Linux und Windows mit unterschiedlichen Einschränkungen.) Ermöglicht die Aufnahme eines Objekts, wenn ein Objekt gesammelt wird. Es kann die Typinformationen nutzen, um Zeiger zu lokalisieren, wenn solche Informationen bereitgestellt werden. Sie werden jedoch normalerweise ohne solche Informationen verwendet.

Boehm GC kann ebenfalls hereinlaufen Leckerkennung Modus[5] In welchem ​​Speicherverwaltung wird noch manuell durchgeführt, aber der Boehm GC kann prüfen, ob es ordnungsgemäß ausgeführt wird. Auf diese Weise kann ein Programmierer Speicherlecks und doppelte Deallokationen finden.

Boehm GC wird auch mit a verteilt C -Stringhandhabung Bibliothek namens Kabel. Dies ist ähnlich wie Seile in C ++ (Bäume von konstanten kleinen Arrays), aber anstatt Referenzzählungen für die ordnungsgemäße Deallocation zu verwenden, stützt es sich auf die Müllsammlung für kostenlose Objekte. Schnüre sind gut darin, sehr große Texte zu handhaben, in der Mitte zu ändern, in der Mitte zu schneiden, zu verkettet und die Geschichte von Veränderungen zu halten (Veränderungen beizubehalten (Veränderungen “(Veränderungen beizubehalten (Veränderungen“ (Veränderungen beizubehalten (Veränderungen) (rückgängig machen/Funktionalität wiederherstellen).

Betrieb

Der Müllsammler arbeitet mit den meisten nicht modifizierten C -Programmen zusammen, indem er einfach ersetzt malloc () mit Gc_malloc () Anrufe, ersetzen realloc () mit Gc_realloc () Anrufe und Entfernen frei() Anrufe.[1] Das folgende Code -Stück zeigt, wie man Boehm anstelle von traditionellem verwenden kann Malloc und frei in C.[6]

#enthalten  #enthalten  #enthalten  int hauptsächlich(Leere) {   int i;   Const int Größe = 10000000;   Gc_init();   zum (i = 0; i < Größe; ++i)   {   int **p = Gc_malloc(Größe von *p);   int *q = Gc_malloc_atomic(Größe von *q);   behaupten(*p == 0);   *p = Gc_realloc(q, 2 * Größe von *p);   wenn (i == Größe-1)   printf("Haufengröße = %ZU\n", Gc_get_heap_size());   }   Rückkehr 0; } 

Für die Vollständigkeit unterstützt Boehm explizite Deallocation über Gc_free ().[7] Die gesamte Substitution kann mit Präprozessor -Makros erfolgen.

Verwendung und Ports

Das Boehm GC wird von vielen Projekten verwendet, die in C oder C ++ implementiert sind Inkscapesowie durch Laufzeitumgebungen für eine Reihe anderer Sprachen, einschließlich Kristall, das GNU -Compiler für Java Laufzeitumgebung, die Tragbar.net Projekt, Eingebettbares gemeinsames Lisp, Gnu Guile, das Mono Implementierung der Microsoft .net Plattform (auch präzise kompaktierende GC seit Version 2.8), Gn .p Optional und libgc-d[8] (eine Bindung an libgc für die D Programmiersprache, in erster Linie im MCI verwendet). Es unterstützt zahlreiche Betriebssysteme, einschließlich vielen Unix Varianten (wie z. Mac OS) und Microsoft Windowsund bietet eine Reihe fortschrittlicher Funktionen, einschließlich inkrementeller Sammlung, paralleler Sammlung und einer Vielzahl von Finalizer Semantik.

Verweise

  1. ^ a b Koranne, Sandeep (2011), Handbuch von Open Source -Tools, Springer, S. 151–154, Bibcode:2011hoos.book ..... k, ISBN 978-1441977199.
  2. ^ Hans Boehm, Ein Müllsammler für C und C ++
  3. ^ Andrew W. Appel (1998),, Moderne Compiler -Implementierung in C. - "Boehm konservativer Müllsammler",",
  4. ^ H. J. Boehm und D. Chase, "Ein Vorschlag zur Zusammenstellung von Müllskollektor-Sicherheit" ", The Journal of C Language Translation, Band 4 Nummer 2 Dezember 1992, Seiten 126-141
  5. ^ Verwenden des Müllsammlers als Leckdetektor
  6. ^ Verwenden des Müllsammlers: Ein einfaches Beispiel
  7. ^ "Garbage Collector -Schnittstelle". www.hboehm.info.
  8. ^ libgc-d

Externe Links