Diferencia entre revisiones de «Fuga de memoria»
Sin resumen de edición |
Sin resumen de edición |
||
Línea 5: | Línea 5: | ||
Dependiendo de la cantidad de memoria perdida y el tiempo que el programa siga en [[tiempo de ejecución|ejecución]], este problema puede llevar al agotamiento de la memoria disponible en la [[computadora]]. |
Dependiendo de la cantidad de memoria perdida y el tiempo que el programa siga en [[tiempo de ejecución|ejecución]], este problema puede llevar al agotamiento de la memoria disponible en la [[computadora]]. |
||
Este problema se da principalmente en aquellos [[lenguajes de programación]] en los que el manejo de memoria es manual (C o C++ principalmente), y por lo tanto es el programador el que debe saber en qué momento exacto puede liberar la memoria. Otros lenguajes utilizan un [[recolector de basura]] que automáticamente |
Este problema se da principalmente en aquellos [[lenguajes de programación]] en los que el manejo de memoria es manual (C o C++ principalmente), y por lo tanto es el programador el que debe saber en qué momento exacto puede liberar la memoria. Otros lenguajes utilizan un [[recolector de basura]] que automáticamente efectúa esta liberación. Sin embargo todavía es posible la existencia de fugas en estos lenguajes si el programa acumula referencias a objetos, impidiendo así que el recolector llegue a considerarlos en desuso. |
||
Existen varias formas de luchar contra este problema. Una forma es el uso de un recolector de basura incluso en el caso en el que éste no sea parte estándar del lenguaje. El más conocido recolector de basura usado de esta manera es el [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ Boehm-Demers-Weiser conservative garbage collector]. Otras técnicas utilizadas son la adopción de esquemas de [[conteo de referencias]] o el uso de pools de memoria (técnica menos popular, utilizada en el servidor Apache y en el sistema de versiones Subversion). |
Existen varias formas de luchar contra este problema. Una forma es el uso de un recolector de basura incluso en el caso en el que éste no sea parte estándar del lenguaje. El más conocido recolector de basura usado de esta manera es el [http://www.hpl.hp.com/personal/Hans_Boehm/gc/ Boehm-Demers-Weiser conservative garbage collector]. Otras técnicas utilizadas son la adopción de esquemas de [[conteo de referencias]] o el uso de pools de memoria (técnica menos popular, utilizada en el servidor Apache y en el sistema de versiones Subversion). |
Revisión del 18:47 8 jun 2008
La plantilla {{Esbozo}}
está obsoleta tras una consulta de borrado, no se debe usar.
Error de software que ocurre cuando un bloque de memoria reservada no es liberada en un programa de computación. Comúnmente ocurre porque se pierden todas las referencias a esa área de memoria antes de haberse liberado.
Dependiendo de la cantidad de memoria perdida y el tiempo que el programa siga en ejecución, este problema puede llevar al agotamiento de la memoria disponible en la computadora.
Este problema se da principalmente en aquellos lenguajes de programación en los que el manejo de memoria es manual (C o C++ principalmente), y por lo tanto es el programador el que debe saber en qué momento exacto puede liberar la memoria. Otros lenguajes utilizan un recolector de basura que automáticamente efectúa esta liberación. Sin embargo todavía es posible la existencia de fugas en estos lenguajes si el programa acumula referencias a objetos, impidiendo así que el recolector llegue a considerarlos en desuso.
Existen varias formas de luchar contra este problema. Una forma es el uso de un recolector de basura incluso en el caso en el que éste no sea parte estándar del lenguaje. El más conocido recolector de basura usado de esta manera es el Boehm-Demers-Weiser conservative garbage collector. Otras técnicas utilizadas son la adopción de esquemas de conteo de referencias o el uso de pools de memoria (técnica menos popular, utilizada en el servidor Apache y en el sistema de versiones Subversion).
También hay herramientas para "auscultar" un programa y detectar las fugas. Una de las herramientas más conocidas es Valgrind.