Coletor de lixo Boehm

O coletor de lixo conservador Boehm-Demers-Weiser

Em formação
O Criador Hans-J. Boehm, Alan J. Demers, Mark Weiser
Última versão 8.0.4 (2 de março de 2019)
Depósito https://github.com/ivmai/bdwgc
Escrito em C, C ++
Idiomas de suporte C, C ++
Licença Licença MIT e Licença Pública Geral GNU
Local na rede Internet https://www.hboehm.info/gc/

O coletor de lixo Boehm - Demers - Weiser, freqüentemente chamado de Boehm GC é um coletor de lixo (coletor de lixo em inglês) Conservador para C e C ++ desenvolvido por Hans Boehm, Alan Demers e Mark Weiser .

Boehm GC é um software livre lançado sob uma licença permissiva semelhante à licença X11 .

Operação

Seu funcionamento é descrito a seguir por Hans Boehm:

“O coletor usa um algoritmo de varredura de marca. Ele fornece coleta incremental e geracional em sistemas operacionais que fornecem o tipo certo de suporte de memória virtual. (Atualmente isso inclui SunOS [45], IRIX, OSF / 1, Linux e Windows, com várias restrições.) Ele permite que o código de finalização seja chamado quando um objeto é coletado. Ele pode tirar proveito das informações de tipo para localizar ponteiros se essas informações forem fornecidas, mas geralmente é usado sem essas informações. "

O Boehm GC também opera no modo de detecção de vazamento . Neste modo, a memória é sempre gerenciada manualmente, mas Boehm GC verifica a fim de identificar melhor os vazamentos de memória, bem como várias desalocações.

Cirurgia

Este coletor de lixo funciona com a maioria dos programas C sem exigir grandes modificações. Basta substituir malloc () por GC_MALLOC () , realloc () por GC_REALLOC () e remover as chamadas para free () . O exemplo a seguir mostra um caso de 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; }

usar

Muitos projetos implementados em C / C ++ usam Boehm GC, incluindo aplicativos de escritório ( Inkscape ), mas também alguns ambientes de tempo de execução ( Crystal (linguagem de programação), o GNU Compiler para Java , o projeto Portable.NET , Embeddable Common Lisp , my Mono implementação do Microsoft.NET )

Boehm GC também oferece suporte a vários sistemas operacionais, incluindo GNU / Linux , MacOS , BSD e Microsoft Windows

Notas e referências

  1. Hans Boehm, um coletor de lixo para C e C ++
  2. Andrew W. Appel (1998), Modern Compiler Implementation in C - " Boehm Conservative Garbage Collector "
  3. Usando o coletor de lixo como detector de vazamento
  4. Sandeep Koranne , Handbook of Open Source Tools , Springer,2011( ISBN  1441977198 , leia online ) , p.  151-154
  5. Usando o coletor de lixo: um exemplo simples

Veja também