Schöpfer | Hans-J. Böhm, Alan J. Demers, Mark Weiser |
---|---|
Letzte Version | 8.0.4 (2. März 2019) |
Anzahlung | https://github.com/ivmai/bdwgc |
Geschrieben in | C, C ++ |
Unterstützungssprachen | C, C ++ |
Lizenz | MIT-Lizenz und GNU General Public License |
Webseite | https://www.hboehm.info/gc/ |
Der Müllsammler Boehm - Demers - Weiser, oft als Boehm GC bezeichnet, ist ein von Hans Boehm, Alan Demers und Mark Weiser entwickelter Müllsammler (Garbage Collector English) Conservative für C und C ++ .
Boehm GC ist freie Software, die unter einer zulässigen Lizenz ähnlich der X11-Lizenz veröffentlicht wird .
Seine Funktionsweise wird von Hans Böhm wie folgt beschrieben:
„Der Sammler verwendet einen Mark-Sweep-Algorithmus. Es bietet eine inkrementelle und generationenübergreifende Erfassung unter Betriebssystemen, die die richtige Art der Unterstützung für virtuellen Speicher bieten. (Derzeit umfasst dies SunOS [45], IRIX, OSF / 1, Linux und Windows mit unterschiedlichen Einschränkungen.) Damit kann der Finalisierungscode aufgerufen werden, wenn ein Objekt erfasst wird. Es kann Typinformationen nutzen, um Zeiger zu lokalisieren, wenn solche Informationen bereitgestellt werden, aber es wird normalerweise ohne solche Informationen verwendet. ""
Der Boehm GC arbeitet auch im Lecksuchmodus . In diesem Modus wird der Speicher immer manuell verwaltet, aber Boehm GC prüft, um Speicherlecks sowie mehrere Freigaben besser zu identifizieren.
Dieser Garbage Collector funktioniert mit den meisten C-Programmen, ohne dass größere Änderungen erforderlich sind. Ersetzen Sie einfach malloc () durch GC_MALLOC () , realloc () durch GC_REALLOC () und entfernen Sie die Aufrufe von free () . Das folgende Beispiel zeigt einen Anwendungsfall.
#include <assert.h> #include <stdio.h> #include <gc.h> int main(void) { int i; const size = 10000000; GC_INIT(); for (i = 0; i < size; i++) { int **p = GC_MALLOC(sizeof *p); int *q = GC_MALLOC_ATOMIC(sizeof *q); assert(*p == 0); *p = GC_REALLOC(q, 2 * sizeof *p); if (i == size-1) printf("Heap size = %zu\n", GC_get_heap_size()); } return 0; }Viele in C / C ++ implementierte Projekte verwenden Boehm GC, einschließlich Office-Anwendungen ( Inkscape ), aber auch einige Laufzeitumgebungen ( Crystal (Programmiersprache), der GNU Compiler für Java , das Portable.NET- Projekt , Embeddable Common Lisp , my Mono Implementierung von Microsoft.NET )
Boehm GC unterstützt auch verschiedene Betriebssysteme, darunter GNU / Linux , MacOS , BSD und Microsoft Windows