Luoja | Hans-J. Boehm, Alan J.Demers, Mark Weiser |
---|---|
Viimeinen versio | 8.0.4 (2. maaliskuuta 2019) |
Tallettaa | https://github.com/ivmai/bdwgc |
Kirjoitettu | C, C ++ |
Tukikielet | C, C ++ |
Lisenssi | MIT-lisenssi ja GNU: n yleinen julkinen lisenssi |
Verkkosivusto | https://www.hboehm.info/gc/ |
Roskankerääjä Boehm - Demers - Weiser, jota kutsutaan usein Boehm GC: ksi, on jätteiden kerääjä (englanninkielinen roskakeräilijä) Hans Boehmin, Alan Demersin ja Mark Weiserin kehittämä konservatiivi C: lle ja C ++ : lle .
Boehm GC on ilmainen ohjelmisto, joka on julkaistu X11-lisenssin kaltaisella sallivalla lisenssillä .
Hans Boehm kuvailee sen toimintaa seuraavasti:
”Keräilijä käyttää mark-sweep-algoritmia. Se tarjoaa inkrementaalista ja sukupolven keruuta käyttöjärjestelmissä, jotka tarjoavat oikeanlaisen virtuaalimuistituen. (Tämä sisältää tällä hetkellä SunOS [45], IRIX, OSF / 1, Linux ja Windows, vaihtelevilla rajoituksilla.) Se sallii viimeistelykoodin käyttämisen objektia kerätessä. Voi käyttää tyyppitietoja etsimään osoittimia, jos tällaisia tietoja annetaan, mutta niitä käytetään yleensä ilman tällaisia tietoja. "
Boehm GC toimii myös vuodonilmaisutilassa . Tässä tilassa muistia hallitaan aina manuaalisesti, mutta Boehm GC tarkistaa muistivuotojen ja useiden jakautumisten tunnistamiseksi paremmin.
Tämä roskien keräilijä toimii useimpien C-ohjelmien kanssa ilman suuria muutoksia. Vain korvata malloc () by GC_MALLOC () , realloc () by GC_REALLOC () ja poista puhelut ilmaiseksi () . Seuraava esimerkki näyttää käyttötapauksen.
#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; }Monet C / C ++ -sovelluksessa toteutetut projektit käyttävät Boehm GC: tä, mukaan lukien toimistosovellukset ( Inkscape ), mutta myös joitain ajonaikaisia ympäristöjä ( Crystal (ohjelmointikieli), GNU Compiler for Java , Portable.NET- projekti , Embeddable Common Lisp , minun Mono täytäntöönpano on Microsoft.NET )
Boehm GC tukee myös erilaisia käyttöjärjestelmiä, kuten GNU / Linux , MacOS , BSD ja Microsoft Windows