2010-05-30 18 views
5

He leído article in LinuxJournal sobre Boehm-Demers-Weiser garbage collector library. Me resulta interesante usarlo en mi biblioteca en lugar de usar mi propia implementación de recuento de referencias.¿Es posible usar el recolector de basura Boehm solo para la parte del programa?

Tengo solo una pregunta: ¿es posible usar gc solo para mi biblioteca compartida y seguir usando malloc/free en la aplicación principal? No entiendo muy bien cómo comprueba gc el montón, así que me preocupa el rendimiento de gc en ese caso y los posibles efectos secundarios.

Respuesta

2

El example en el manual indica:

lo general es mejor no mezclar la asignación de recolección de basura con el sistema malloc - free. Si lo hace, debe tener cuidado de no almacenar punteros en el montón recogido de basura en la memoria asignada con el sistema malloc.

y más específicamente para C++:

En el caso de C++, es necesario tener especial cuidado de no almacenar punteros a la pila de recolección de basura en áreas que no han sido localizadas por el colector. El recolector incluye some alternate interfaces para que sea más fácil.

Al observar el código fuente en el manual, verá que la memoria recolectada se maneja a través de llamadas específicas, por lo tanto, la administración se maneja por separado (ya sea por el colector o manualmente). Por lo tanto, siempre que su biblioteca maneje sus elementos internos de manera adecuada y no exponga la memoria recolectada, debería estar bien. No sabes cómo otras bibliotecas administran su memoria y puedes usarlas también, ¿no? :)

1

yo creo que sí, se puede mezclar los dos: embargo si asigna un objeto con el asignador normal que contiene una referencia a un objeto de asignar a la recolección de basura, entonces esa referencia no será visible a el GC para que el objeto pueda ser desasignado prematuramente.

Eche un vistazo a la especificación de función GC_MALLOC_UNCOLLECTABLE si necesita que el GC tenga en cuenta las referencias en la memoria que no se deben recopilar.

En resumen, sí, pero aquí hay dragones si no tiene cuidado!

+0

No * aquí son dragones * normalmente se hace referencia a un territorio desconocido? –

+0

Bueno, creo que intentar depurar un GC doblemente libre en un entorno de asignación mixta sería como intentar navegar en una región de un mapa que dice "aquí hay dragones";) – James

+0

Gracias. Su respuesta y respuesta de Pieter están muy cerca de lo que necesito saber. – bialix

Cuestiones relacionadas