Boehm garbage collector
Andere Namen | Bdwgc |
---|---|
Originalautor (en) | Hans-Juergen Boehm |
Entwickler (en) | Ivan Maidanski et al. |
Erstveröffentlichung | 1988 |
Stabile Version | 8.0.6 / 28. September 2021 |
Vorschau -Version | 8.2.0 / 29. September 2021 |
Repository | |
Geschrieben in | C |
Typ | Müllsammler |
Lizenz | ähnlich zu X11 (gratis Software) |
Webseite | www |
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
- ^ a b Koranne, Sandeep (2011), Handbuch von Open Source -Tools, Springer, S. 151–154, Bibcode:2011hoos.book ..... k, ISBN 978-1441977199.
- ^ Hans Boehm, Ein Müllsammler für C und C ++
- ^ Andrew W. Appel (1998),, Moderne Compiler -Implementierung in C. - "Boehm konservativer Müllsammler",",
- ^ 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
- ^ Verwenden des Müllsammlers als Leckdetektor
- ^ Verwenden des Müllsammlers: Ein einfaches Beispiel
- ^ "Garbage Collector -Schnittstelle". www.hboehm.info.
- ^ libgc-d