Śmieciarka Boehm

Konserwatywny zbieracz śmieci Boehm-Demers-Weiser

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

Operacja

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.

Operacja

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

posługiwać się

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

Uwagi i odniesienia

  1. Hans Boehm, Garbage collector dla C i C ++
  2. Andrew W. Appel (1998), Nowoczesna implementacja kompilatora w C - „ Boehm Conservative Garbage Collector
  3. Używanie garbage collectora jako wykrywacza nieszczelności
  4. Sandeep Koranne , Podręcznik narzędzi Open Source , Springer,2011( ISBN  1441977198 , czytaj online ) , str.  151-154
  5. Używanie garbage collectora: prosty przykład

Zobacz też