Opened 14 years ago
Last modified 13 years ago
#1079 closed defect
¿Podría usarse un Garbage collector en TOL? — at Version 4
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 )
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.
Hay que tener en cuenta que el actual sistema de gestión de memoria BFSMEM es incompatible con cualquier tipo de GC, pero no hay problema pues es sencillo de deshabilitar. De hecho podría ser la puerta para un uso parcial de un GC pues internamente sobrecarga los operadores new y delete que podrían derivarse a los del GC mediante opciones de configuración.
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.
- shared_ptr: se distribuye dentro de BOOST
- gcPtr: Proyecto unipersonal sin licencia específica
Change History (4)
comment:1 Changed 14 years ago by
Cc: | Jorge Pedro Gea added |
---|
comment:2 Changed 14 years ago by
Description: | modified (diff) |
---|
comment:3 Changed 14 years ago by
Description: | modified (diff) |
---|
comment:4 Changed 14 years ago by
Description: | modified (diff) |
---|