El recolector de basura Boehm – Demers – Weiser , a menudo conocido simplemente como Boehm GC , es un recolector de basura conservador para C y C ++ [1] desarrollado por Hans Boehm, Alan Demers y Mark Weiser . [2] [3]
Repositorio | |
---|---|
Escrito en | C y C ++ |
Tipo | recolector de basura |
Licencia | similar a X11 ( software gratuito ) |
Sitio web | www |
Boehm GC es un software gratuito distribuido bajo una licencia de software libre permisiva similar a la licencia X11 .
Diseño
Hans Boehm describe el funcionamiento del colector de la siguiente manera:
El recopilador utiliza un algoritmo de barrido de marcas. Proporciona una 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 ubicar punteros si se proporciona dicha información, pero generalmente se usa sin dicha información.
Boehm GC también puede ejecutarse en modo de detección de fugas [4], en el que la gestión de la memoria aún se realiza manualmente, pero el Boehm GC puede comprobar 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 cordones. Esto es similar a las cuerdas en C ++ ( árboles de arreglos pequeños constantes), pero en lugar de usar el recuento de referencias para la 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 trabaja con la mayoría de los programas C no modificados, simplemente reemplazando malloc () con Llamadas GC_MALLOC () , reemplazando realloc () con Llamadas a GC_REALLOC () y eliminando llamadas gratis () . [1] El siguiente fragmento de código muestra cómo se puede usar Boehm en lugar del tradicional malloc y gratis en C. [5]
#include #include #include int main ( vacío ) { int i ; const int tamaño = 10000000 ; GC_INIT (); para ( i = 0 ; i < tamaño ; ++ i ) { int ** p = GC_MALLOC ( sizeof * p ); int * q = GC_MALLOC_ATOMIC ( sizeof * 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 ()); } return 0 ; }
Para completar, boehm admite la desasignación explícita a través de GC_FREE () . [6] Toda la sustitución se puede realizar utilizando macros de preprocesador.
Usos y puertos
Boehm GC es utilizado por muchos proyectos que se implementan en C o C ++ como Inkscape , así como por entornos de ejecución para varios otros lenguajes, incluido Crystal , el compilador GNU para el entorno de ejecución de Java , el proyecto Portable.NET , Embeddable Common Lisp , GNU Guile , la implementación Mono de la plataforma Microsoft .NET (que también usa GC de compactación precisa desde la versión 2.8), GNUstep opcionalmente y libgc-d [7] (un enlace a libgc para el lenguaje de programación D , usado principalmente en el 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
- ^ a b Koranne, Sandeep (2011), Manual de herramientas de código abierto , Springer, pp. 151-154, Bibcode : 2011hoos.book ..... K , ISBN 978-1441977199.
- ^ Hans Boehm, un recolector de basura para C y C ++
- ^ Andrew W. Appel (1998), Implementación del compilador moderno en C - " Recolector de basura conservador de Boehm "
- ^ Uso del recolector de basura como detector de fugas
- ^ Uso del recolector de basura: un ejemplo simple
- ^ "Interfaz del recolector de basura" . www.hboehm.info .
- ^ libgc-d
enlaces externos
- Página web oficial
- Recolector de basura Boehm en SourceForge.net
- Repositorio de Git para el desarrollo de BoehmGC en GitHub
- Recolección de basura transparente dirigida por programador para C ++, Hans-J. Boehm y Michael Spertus
- Dr. Dobbs The Boehm Collector para C y C ++, Gene Michael Stover, 01 de marzo de 2003