Netturbino Boehm

Il Garbage Collector conservatore di Boehm-Demers-Weiser

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

Operazione

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.

Chirurgia

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

uso

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

Note e riferimenti

  1. Hans Boehm, Un garbage collector per C e C ++
  2. Andrew W. Appel (1998), Modern Compiler Implementation in C - " Boehm Conservative Garbage Collector "
  3. Utilizzo del Garbage Collector come rilevatore di perdite
  4. Sandeep Koranne , Handbook of Open Source Tools , Springer,2011( ISBN  1441977198 , leggi online ) , p.  151–154
  5. Utilizzo del Garbage Collector: un semplice esempio

Vedi anche