Twórca | Hans-J. Boehm, Alan J. Demers, Mark Weiser |
---|---|
Ostatnia wersja | 8.0.4 (2 marca 2019 roku) |
Kaucja | https://github.com/ivmai/bdwgc |
Napisane w | C, C ++ |
Obsługiwane języki | C, C ++ |
Licencja | Licencja MIT i Powszechna Licencja Publiczna GNU |
Stronie internetowej | https://www.hboehm.info/gc/ |
Garbage collector Boehm - Demers - Weiser, często nazywany Boehm GC jest garbage collector (garbage collector angielski) zachowawcza dla C i C ++ opracowane przez Hansa Boehm Alan Demers i Mark Weiser .
Boehm GC jest darmowym oprogramowaniem rozpowszechnianym na zezwolonej licencji podobnej do licencji X11 .
Jego działanie opisuje Hans Boehm w następujący sposób:
„Kolektor używa algorytmu zamiatania znaczników. Zapewnia gromadzenie przyrostowe i generacyjne w systemach operacyjnych, które zapewniają odpowiednią obsługę pamięci wirtualnej. (Obecnie obejmuje to SunOS [45], IRIX, OSF / 1, Linux i Windows, z różnymi ograniczeniami.) Umożliwia wywołanie kodu finalizacji podczas zbierania obiektu. Może skorzystać z informacji o typie, aby zlokalizować wskaźniki, jeśli takie informacje są podane, ale zwykle jest używana bez takich informacji. "
Boehm GC działa również w trybie wykrywania nieszczelności . W tym trybie pamięć jest zawsze zarządzana ręcznie, ale Boehm GC sprawdza, aby lepiej zidentyfikować wycieki pamięci, a także wielokrotne zwolnienia.
Ten garbage collector działa z większością programów w C bez konieczności dokonywania większych modyfikacji. Po prostu zamień malloc () na GC_MALLOC () , realloc () na GC_REALLOC () i usuń wywołania free () . Poniższy przykład przedstawia przypadek użycia.
#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; }Wiele projektów wdrożonych w C / C ++ korzysta z Boehm GC, w tym aplikacje biurowe ( Inkscape ), ale także niektóre środowiska uruchomieniowe ( Crystal (język programowania), kompilator GNU dla Java , projekt Portable.NET , Embeddable Common Lisp , my Mono realizacja od Microsoft.NET )
Boehm GC obsługuje również różne systemy operacyjne, w tym GNU / Linux , MacOS , BSD i Microsoft Windows