Tvůrce | Hans-J. Boehm, Alan J. Demers, Mark Weiser |
---|---|
Poslední verze | 8.0.4 (2. března 2019) |
Vklad | https://github.com/ivmai/bdwgc |
Napsáno | C, C ++ |
Jazyky podpory | C, C ++ |
Licence | Licence MIT a GNU General Public License |
webová stránka | https://www.hboehm.info/gc/ |
Sběrač odpadků Boehm - Demers - Weiser, často nazývaný Boehm GC, je sběrač odpadků (anglicky Garbage collector English), konzervativní pro jazyk C a C ++, který vyvinuli Hans Boehm, Alan Demers a Mark Weiser .
Boehm GC je svobodný software distribuovaný na základě permisivní licence podobné licenci X11 .
Jeho provoz popisuje Hans Boehm takto:
"Sběratel používá algoritmus zametání značek." Poskytuje přírůstkové a generační shromažďování v operačních systémech, které poskytují správný druh podpory virtuální paměti. (V současné době to zahrnuje SunOS [45], IRIX, OSF / 1, Linux a Windows s různými omezeními.) Umožňuje vyvolání finalizačního kódu při sběru objektu. Může použít výhodu informací o typu k vyhledání ukazatelů, pokud jsou takové informace poskytnuty, ale obvykle se používá bez těchto informací. "
Boehm GC také pracuje v režimu detekce úniků . V tomto režimu je paměť vždy spravována ručně, ale Boehm GC kontroluje, aby lépe identifikovala úniky paměti i více deallocationů.
Tento garbage collector pracuje s většinou programů C bez nutnosti zásadních úprav. Stačí nahradit malloc () za GC_MALLOC () , realloc () za GC_REALLOC () a odebrat volání free () . Následující příklad ukazuje případ použití.
#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; }Mnoho projektů implementovaných v C / C ++ používá Boehm GC, včetně kancelářských aplikací ( Inkscape ), ale také některých běhových prostředí ( Crystal (programovací jazyk), GNU Compiler for Java , projekt Portable.NET , Embeddable Common Lisp , my Mono implementace of Microsoft.NET )
Boehm GC podporuje také různé operační systémy včetně GNU / Linux , MacOS , BSD a Microsoft Windows