Top Qs
Chronologie
Chat
Contexte

Boehm garbage collector

De Wikipédia, l'encyclopédie libre

Remove ads

Le garbage collector Boehm – Demers – Weiser, souvent appelé Boehm GC, est un ramasse-miettes (garbage collector en anglais) conservateur pour C et C ++ développé par Hans Boehm, Alan Demers et Mark Weiser[1],[2].

Faits en bref Créateur, Première version ...

Boehm GC est un logiciel libre distribué sous une licence permissive similaire à la licence X11.

Remove ads

Fonctionnement

Son fonctionnement est décrit comme suit par Hans Boehm :

« The collector uses a mark-sweep algorithm. It provides incremental and generational collection under operating systems which provide the right kind of virtual memory support. (Currently this includes SunOS[45], IRIX, OSF/1, Linux, and Windows, with varying restrictions.) It allows finalization code to be invoked when an object is collected. It can take advantage of type information to locate pointers if such information is provided, but it is usually used without such information. »

Le Boehm GC fonctionne également en mode détection de fuite[3]. Dans ce mode, la mémoire est toujours gérée manuellement, mais Boehm GC fait des vérifications afin de mieux cerner les fuites mémoires ainsi que les désallocations multiples.

Remove ads

Opération

Ce ramasse-miettes fonctionne avec la plupart des programmes C sans nécessiter de modifications majeures. Il suffit de remplacer malloc() par GC_MALLOC(), realloc() par GC_REALLOC() et supprimer les appels à free()[4]. L'exemple suivant montre un cas d'utilisation[5].

#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;
}
Remove ads

Utilisation

De nombreux projets implémentés en C/C++ utilisent Boehm GC, dont des applications bureautiques (Inkscape), mais aussi certains environnements d'exécution ( Crystal (langage de programmation), le Compilateur GNU pour Java, le projet Portable.NET, Embeddable Common Lisp, l'implémentation Mono de Microsoft.NET)

Boehm GC supporte également divers systèmes d'exploitation parmi lesquels GNU/Linux, MacOS, BSD et Microsoft Windows

Notes et références

Liens externes

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads