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