Gestión de memoria
Cómo reserva y libera un programa la memoria RAM que usa: a mano (C), con un recolector de basura (Java, Python) o con reglas de propiedad (Rust).
En C y C++ el programador pide memoria y la devuelve cuando ya no la necesita. Si se olvida, la memoria queda ocupada (fuga); si la usa después de devolverla, el programa puede fallar o ser vulnerable.
Java, C#, Python, Go o JavaScript usan un recolector de basura que libera automáticamente lo que ya no se usa. Rust sigue otro camino: el compilador sabe quién es el dueño de cada dato y lo libera al terminar su ámbito.
Un ejemplo
Un programa con una fuga de memoria va ocupando cada vez más RAM hasta que el sistema se ralentiza o lo cierra.
Por qué importa
Todo programa necesita memoria para sus datos, y alguien tiene que decidir cuándo se reserva y cuándo se devuelve al sistema. Según el lenguaje, esa tarea recae en ti (C reserva con malloc y libera con free), en un recolector de basura que se ejecuta por detrás (Java, C#, JavaScript, Python y Go) o en reglas comprobadas al compilar (Rust con su sistema de propiedad).
Importa porque un fallo aquí produce síntomas que no se parecen a la causa: programas que consumen cada vez más RAM hasta bloquearse, cierres inesperados o vulnerabilidades de seguridad. Saber qué modelo usa tu lenguaje te dice de qué debes preocuparte y de qué no. En un lenguaje con recolector, por ejemplo, rara vez liberas a mano, pero sí puedes retener objetos sin querer y provocar fugas.
Confusiones frecuentes
Una confusión habitual es creer que, con recolector de basura, ya no existen las fugas de memoria. Sí existen: si una lista global sigue guardando referencias a objetos que ya no necesitas, el recolector no puede borrarlos porque aún son alcanzables. Otra es mezclar la pila y el montón: las variables locales sencillas viven en la pila y se liberan solas al salir de la función, mientras que lo reservado dinámicamente vive en el montón y hay que gestionarlo, a mano o con ayuda del lenguaje.
Preguntas frecuentes
¿Qué es una fuga de memoria?
Memoria que el programa reservó y ya no usa, pero que no se libera. Con el tiempo se acumula y el consumo crece. En C suele ser un malloc sin su free; en lenguajes con recolector, referencias olvidadas.
¿Qué es la pila y qué es el montón?
La pila guarda variables locales y llamadas a funciones, y se libera automáticamente al terminar cada función. El montón guarda datos de vida más larga o tamaño variable y requiere gestión explícita o recolector.
Fuentes consultadas
- Understanding Ownership (The Rust Programming Language)