close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Last modified 13 years ago

#1079 closed defect

¿Podría usarse un Garbage collector en TOL? — at Version 3

Reported by: Víctor de Buen Remiro Owned by: Víctor de Buen Remiro
Priority: low Milestone: Mantainance
Component: Kernel Version:
Severity: minor Keywords: Garbage collector
Cc: Jorge, Pedro Gea

Description (last modified by Víctor de Buen Remiro)

El sistema de conteo de referencias de TOL es muy complicado y tiene errores y situaciones inesperadas que producen a veces pérdidas de memoria (memory leaks) y otros errores peores aunque con menor frecuencia.

Si existiera un sistema de recolección de basura (GC: Garbage Collector) que se ocupara de ese problema de forma externa podríamos ahorrarnos mucho esfuerzo en la persecución de este tipo de errores, que son tremendamente difíciles de aislar y aún más de arreglar.

Tal sistema debería integrarse en el código C++ de TOL de forma opcional mediante compilación condicional, al menos durante un largo periodo de pruebas, pues no está claro que no vaya a afectar a la eficiencia de TOL o que pueda ocasionar otro tipo de problemas.

Estas son las posibilidades que se recomiendan a la hora de integrar un GC en una aplicación C/C++:

  • Conservative garbage collector: Estos sistemas aportan funciones de asignación y reasignación que hay que llamar en lugar de malloc, realloc o new. En teoría es posible sustituir las funciones del sistema por las del GC para que no haya que tocar el código. Aquí se pueden ver ventajas e inconvenientes de este tipo de sistemas
    • Boehm-Demers-Weiser GC: de HP con licencia GPL
    • libgc : Creo sólo funciona en el sistema Oracle Solaris y no estoy seguro del tipo de licencia.
    • CGCC: Proyecto unipersonal de Yasin HINISLIOGLU con licencia GPL
  • Template Smart Pointers: Hay que heredar de una clase base y llamar a un template del tipo para el alojamiento de memoria. Sólo sirve en C++ por razones obvias.

Change History (3)

comment:1 Changed 14 years ago by Víctor de Buen Remiro

Cc: Jorge Pedro Gea added

comment:2 Changed 14 years ago by Víctor de Buen Remiro

Description: modified (diff)

comment:3 Changed 14 years ago by Víctor de Buen Remiro

Description: modified (diff)
Note: See TracTickets for help on using tickets.