Creatore | Hans-J. Boehm, Alan J. Demers, Mark Weiser |
---|---|
Ultima versione | 8.0.4 (2 marzo 2019) |
Depositare | https://github.com/ivmai/bdwgc |
Scritto in | C, C ++ |
Lingue supportate | C, C ++ |
Licenza | Licenza MIT e GNU General Public License |
Sito web | https://www.hboehm.info/gc/ |
Il garbage collector Boehm - Demers - Weiser, spesso chiamato Boehm GC è un garbage collector (garbage collector inglese) conservatore per C e C ++ sviluppato da Hans Boehm, Alan Demers e Mark Weiser .
Boehm GC è un software gratuito rilasciato con una licenza permissiva simile alla licenza X11 .
Il suo funzionamento è descritto come segue da Hans Boehm:
“Il raccoglitore utilizza un algoritmo mark-sweep. Fornisce raccolta incrementale e generazionale con sistemi operativi che forniscono il giusto tipo di supporto per la memoria virtuale. (Attualmente questo include SunOS [45], IRIX, OSF / 1, Linux e Windows, con limitazioni variabili.) Consente di richiamare il codice di finalizzazione quando viene raccolto un oggetto. Può trarre vantaggio dalle informazioni sul tipo per individuare i puntatori se vengono fornite tali informazioni, ma di solito viene utilizzato senza tali informazioni. "
Il Boehm GC funziona anche in modalità di rilevamento delle perdite . In questa modalità, la memoria è sempre gestita manualmente, ma Boehm GC controlla per identificare meglio le perdite di memoria e le deallocazioni multiple.
Questo garbage collector funziona con la maggior parte dei programmi C senza richiedere grosse modifiche. Basta sostituire malloc () con GC_MALLOC () , realloc () con GC_REALLOC () e rimuovere le chiamate a free () . L'esempio seguente mostra un caso d'uso.
#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; }Molti progetti implementati in C / C ++ utilizzano Boehm GC, incluse applicazioni per ufficio ( Inkscape ), ma anche alcuni ambienti runtime ( Crystal (linguaggio di programmazione), il compilatore GNU per Java , il progetto Portable.NET , Embeddable Common Lisp , my Mono implementazione di Microsoft.NET )
Boehm GC supporta anche vari sistemi operativi tra cui GNU / Linux , MacOS , BSD e Microsoft Windows