Boehm søppeloppsamler

Den konservative søppeloppsamleren Boehm-Demers-Weiser

Informasjon
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 .

Operasjon

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.

Kirurgi

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; }

bruk

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

Merknader og referanser

  1. Hans Boehm, en søppeloppsamler for C og C ++
  2. Andrew W. Appel (1998), Modern Compiler Implementation in C - " Boehm Conservative Garbage Collector "
  3. Bruke søppeloppsamleren som lekkasjedetektor
  4. Sandeep Koranne , håndbok for verktøy med åpen kildekode , Springer,2011( ISBN  1441977198 , leses online ) , s.  151–154
  5. Bruke søppeloppsamleren: Et enkelt eksempel

Se også