Skaper | Hans-J. Boehm, Alan J. Demers, Mark Weiser |
---|---|
Siste versjon | 8.0.4 (2. mars 2019) |
Innskudd | https://github.com/ivmai/bdwgc |
Skrevet i | C, C ++ |
Støttespråk | C, C ++ |
Tillatelse | MIT-lisens og GNU General Public License |
Nettsted | https://www.hboehm.info/gc/ |
Søppeloppsamleren Boehm - Demers - Weiser, ofte kalt Boehm GC, er en søppeloppsamler (søppeloppsamler engelsk) Konservativ for C og C ++ utviklet av Hans Boehm, Alan Demers og Mark Weiser .
Boehm GC er gratis programvare utgitt under en tillatelseslisens som ligner på X11-lisensen .
Driften av den er beskrevet som følger av Hans Boehm:
“Samleren bruker en mark-sweep-algoritme. Det gir inkrementell og generasjonsinnsamling under operativsystemer som gir riktig type støtte for virtuelt minne. (Foreløpig inkluderer dette SunOS [45], IRIX, OSF / 1, Linux og Windows, med varierende begrensninger.) Det gjør at sluttkode kan påberopes når et objekt blir samlet. Det kan dra nytte av typeinformasjon for å finne pekere hvis slik informasjon gis, men den brukes vanligvis uten slik informasjon. "
Boehm GC fungerer også i lekkasjedeteksjonsmodus . I denne modusen styres minnet alltid manuelt, men Boehm GC sjekker for å bedre identifisere minnelekkasjer så vel som flere deallokasjoner.
Denne søppeloppsamleren fungerer med de fleste C-programmer uten å kreve større endringer. Bare erstatt malloc () med GC_MALLOC () , realloc () med GC_REALLOC () og fjern samtalene til gratis () . Følgende eksempel viser en brukstilfelle.
#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; }Mange prosjekter implementert i C / C ++ bruker Boehm GC, inkludert kontorapplikasjoner ( Inkscape ), men også noen kjøretidsmiljøer ( Crystal (programmeringsspråk), GNU Compiler for Java , Portable.NET- prosjektet , Embeddable Common Lisp , min Mono implementering av Microsoft.NET )
Boehm GC støtter også forskjellige operativsystemer, inkludert GNU / Linux , MacOS , BSD og Microsoft Windows