Boehm garbage collector

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

The Boehm-Demers-Weiser conservative Garbage Collector

Informations
Créateur Hans-J. Boehm, Alan J. Demers, Mark Weiser
Première version
Dernière version 8.0.4 ()
Dépôt https://github.com/ivmai/bdwgc
Écrit en C, C++
Supporte les langages C, C++
Licence Licence MIT et licence publique générale GNU
Site web https://www.hboehm.info/gc/

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

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.

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

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

  1. Hans Boehm, A garbage collector for C and C++
  2. Andrew W. Appel (1998), Modern Compiler Implementation in C - "Boehm Conservative Garbage Collector"
  3. Using the Garbage Collector as Leak Detector
  4. Sandeep Koranne, Handbook of Open Source Tools, Springer, , 484 p. (ISBN 978-1-4419-7719-9 et 1-4419-7719-8, lire en ligne), p. 151–154
  5. Using the Garbage Collector: A simple example

Voir aussi

  • Portail de l’informatique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.