¿Qué es un leak?

En este post vamos a estudiar uno de los conceptos más importantes que existen en el mundo de la programación. Un leak no es algo que exclusivamente debamos conocer y entender, sino algo que deberemos evitar a toda costa sin excepciones. Un leak no podrá aparecer en ningún momento durante la ejecución de nuestro programa.

Un leak, también conocido como fuga de memoria, hace referencia a la pérdida de información que utiliza, o ha utilizado, nuestro programa durante su ejecución. Es decir, es una pérdida de los recursos que nuestro programa necesita para poder ejecutarse correctamente. Esta pérdida es debida, principalmente, a dos factores:

  • El programa presenta fallos que provocan la pérdida de recursos necesarios. Debido a esto, en el momento de acceder a una información de la que no disponemos, por haberla perdido, el programa se comportará de manera inesperada. Esto puede acarrear desde pequeños fallos hasta catástrofes capaces de comprometer proyectos de gran importancia.
  • El programa ya no necesitará dichos recursos y decide deshacerse de ellos bruscamente, es decir, sin gestionar la forma en la que dichos recursos ya no van a ser utilizados. Un ejemplo de esto lo encontramos al utilizar memoria dinámica. Si reservamos una zona de la memoria, dicha zona estará referenciada por un puntero. Si por algún motivo el puntero pierde la referencia a dicha zona, no habrá manera de acceder a ella. Esto puede provocar que una gran parte de la memoria no pueda ser utilizada debido a que ha sido reservada pero no se puede acceder a ella.

Ambos casos tienen solución, si bien la solución puede llegar de forma tardía si el error producido ha causado grandes daños:

  • En el primer caso bastaría con identificar el origen del problema y solucionarlo. Parece algo bastante sencillo, pero en programas muy extensos encontrar un simple leak puede llevar horas de arduo trabajo. Por este motivo es importante asegurarse que, durante el desarrollo del código, no vamos arrastrando leaks. A su vez, una vez terminado el proyecto siempre es importante someterlo a pruebas en un entorno donde los fallos no produzcan daños.
  • El segundo caso se soluciona haciendo una buena gestión de los recursos utilizados. Si hemos reservado una zona de la memoria para trabajar sobre ella, deberemos liberar dicha zona en el momento en que sepamos que no vamos a utilizarla más. Este proceso es bastante similar al de cerrar un archivo que ha sido abierto para trabajar sobre él. Al final, lo importante es saber qué sucede con todos los recursos que utiliza el programa.
Memory Leaks
¿Cómo identificar un memory leak?

Hay lenguajes de programación donde simplemente no tendrás que preocuparte por la existencia de fugas de memoria ya que el propio intérprete del lenguaje se encargará de gestionar toda la memoria que no utilizas. Sin embargo, esto no sucede en lenguajes de programación como C o C++.

Si trabajas en un shell como bash podrás observar que hay un comando llamado leaks. Este comando busca en la memoria zonas que han sido reservadas pero que no son referenciadas. Así, tendrás información sobre si tu programa produce leaks o no. Sin duda, esto te solucionará horas y horas de debuggear tu programa.

Para seguir aprendiendo…

Wikipedia: Fuga de memoria

Megazona: Perdida de Memoria en ASP o Memory Leak en ASP

Linux Terminal: man leaks (manual sobre comando para detectar fugas de memoria)

Anuncio publicitario

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: