¿Qué es la asignación dinámica de memoria?
La asignación de memoria dinámica, también llamada asignación de memoria basada en el montón, es un tipo de administración de memoria que contrasta fuertemente con la asignación de memoria estática. En la asignación dinámica de memoria, el programador le dice a la computadora exactamente cuánta memoria asignar para cada programa y cuánto tiempo mantener en la memoria. Esto resuelve muchos de los problemas que ocurren en la asignación de memoria estática, como el uso excesivo de memoria y los programas bloqueados. Si bien resuelve muchos problemas, si el programador olvida decirle a la memoria que se descargue, la memoria dinámica puede convertirse en un problema.
Las computadoras, por defecto, utilizan la asignación de memoria estática. Esto significa que la memoria retiene los programas cuando se usan, incluso si el programa ya no se usa o si la memoria retenida se vuelve peligrosa o un obstáculo para el rendimiento. Por ejemplo, si el usuario deja de ejecutar un programa que toma 2 megabytes (MB) en una máquina de 3 MB y un segundo programa necesita otros 2 MB, el segundo programa no funcionará. Esto se debe a que no queda suficiente memoria en la computadora para el otro programa.
Con la asignación de memoria estática, el usuario o programador no puede especificar la cantidad de memoria que desea almacenar, ni el programador puede decirle a la memoria estática que descargue la memoria para liberar recursos. Esta es la razón por la cual los usuarios avanzados suelen utilizar la asignación dinámica de memoria. El programador es capaz de controlar todo lo relacionado con la memoria, incluido cuánto tiempo conservar los recursos.
Por ejemplo, el programador puede configurar la asignación de memoria dinámica para mantener solo 1 MB, o menos, lo que ahorraría suficiente memoria del sistema para permitir que otros programas se abran. Esto se puede hacer porque la memoria estática generalmente retiene todo sobre el programa, mientras que la memoria dinámica permite a los programadores establecerlo en un valor más bajo que contiene algunos datos, pero no todo. Al mismo tiempo, aún se necesitará memoria estática, y se puede configurar en este esquema de asignación.
Un problema potencial con la asignación de memoria dinámica, que rara vez entra en juego, es que la memoria dinámica puede llenarse si el programador olvida establecer un valor de tiempo. Si no se establece ningún valor de tiempo, a diferencia de la memoria estática que eventualmente liberará la memoria, la memoria dinámica retendrá la información. Si el programa tiene una aplicación de volcado de basura, y la mayoría lo hace, se activará después de un cierto tiempo para borrar la memoria. Todavía es una buena práctica establecer un valor de tiempo para la asignación de memoria.