stringtranslate.com

Recolector de basura boehm

El recolector de basura Boehm-Demers-Weiser , a menudo conocido simplemente como Boehm GC o recolector de Boehm , es un recolector de basura conservador para C y C++ [1] desarrollado por Hans Boehm, Alan Demers y Mark Weiser . [2] [3]

Boehm GC es software libre distribuido bajo una licencia de software libre permisiva similar a la licencia X11 . El primer artículo que presenta a este coleccionista apareció en 1992. [4]

Diseño

Hans Boehm describe el funcionamiento del colector de la siguiente manera:

El recopilador utiliza un algoritmo de barrido de marcas. Proporciona recopilación incremental y generacional en sistemas operativos que brindan el tipo adecuado de soporte de memoria virtual. (Actualmente esto incluye SunOS[45], IRIX, OSF/1, Linux y Windows, con diversas restricciones). Permite invocar el código de finalización cuando se recopila un objeto. Puede aprovechar la información de tipo para localizar punteros si se proporciona dicha información, pero generalmente se usa sin dicha información.

—  http://www.hboehm.info/gc/#details

Boehm GC también puede ejecutarse en modo de detección de fugas [5] en el que la administración de la memoria aún se realiza manualmente, pero Boehm GC puede verificar si se realiza correctamente. De esta manera, un programador puede encontrar pérdidas de memoria y desasignaciones dobles.

Boehm GC también se distribuye con una biblioteca de manejo de cadenas C llamada cords. Esto es similar a las cuerdas en C++ ( árboles de matrices pequeñas constantes), pero en lugar de usar el recuento de referencias para una desasignación adecuada, se basa en la recolección de basura para liberar objetos. Los cables son buenos para manejar textos muy grandes, modificarlos en el medio, dividirlos, concatenarlos y mantener el historial de cambios ( funcionalidad deshacer /rehacer).

Operación

El recolector de basura funciona con la mayoría de los programas C no modificados, simplemente reemplazando malloc() con llamadas GC_MALLOC() , reemplazando realloc() con llamadas GC_REALLOC() y eliminando llamadas free() . [1] El siguiente código muestra cómo se puede usar Boehm en lugar del malloc tradicional y gratis en C. [6]

#incluye <assert.h> #incluye <stdio.h> #incluye <gc.h>   int principal ( vacío ) { int i ; tamaño int constante = 10000000 ;         GC_INIT (); for ( i = 0 ; i < tamaño ; ++ i ) { int ** p = GC_MALLOC ( tamaño de * p ); int * q = GC_MALLOC_ATOMIC ( tamaño de * q );                    afirmar ( * p == 0 ); * p = GC_REALLOC ( q , 2 * tamaño de * p ); if ( i == tamaño -1 ) printf ( "Tamaño del montón = %zu \n " , GC_get_heap_size ()); }                 devolver 0 ; } 

Para completar, Boehm admite la desasignación explícita a través de GC_FREE() . [7] Toda la sustitución se puede realizar utilizando macros de preprocesador.

Usos y puertos

El Boehm GC es utilizado por muchos proyectos [8] que se implementan en C o C++ como Inkscape , así como por entornos de ejecución para varios otros lenguajes, incluido Crystal , el compilador Codon de Python de alto rendimiento, [9] el compilador GNU. para el entorno de ejecución Java , el proyecto Portable.NET , Embeddable Common Lisp , GNU Guile , la implementación Mono de la plataforma Microsoft .NET (que también utiliza GC de compactación precisa desde la versión 2.8), GNUstep opcionalmente y libgc-d [10] (un enlace a libgc para el lenguaje de programación D , utilizado principalmente en MCI). Es compatible con numerosos sistemas operativos , incluidas muchas variantes de Unix (como macOS ) y Microsoft Windows , y proporciona una serie de funciones avanzadas que incluyen recopilación incremental, recopilación paralela y una variedad de semánticas de finalizador .

Referencias

  1. ^ ab Koranne, Sandeep (2011), Manual de herramientas de código abierto, Springer, págs. 151-154, Bibcode : 2011hoos.book..... K, ISBN 978-1441977199.
  2. ^ Hans Boehm, un recolector de basura para C y C++
  3. ^ Andrew W. Appel (1998), Implementación del compilador moderno en C - "Boehm Conservative Garbage Collector",
  4. ^ HJ Boehm y D. Chase, "Una propuesta para la compilación C segura para el recolector de basura", The Journal of C Language Translation, volumen 4, número 2, diciembre de 1992, páginas 126-141
  5. ^ Uso del recolector de basura como detector de fugas
  6. ^ Uso del recolector de basura: un ejemplo sencillo
  7. ^ "Interfaz del recolector de basura". www.hboehm.info .
  8. ^ Usos conocidos de BDWGC
  9. ^ "Exaloop/Codón". GitHub .
  10. ^ libgc-d

enlaces externos