La asignación de memoria dinámica, también llamada asignación de memoria basada en montones, es un tipo de administración de memoria que contrasta marcadamente con la asignación de memoria estática. En la asignación de memoria dinámica, el programador le dice a la computadora exactamente cuánta memoria debe asignar para cada programa y cuánto tiempo debe retener la memoria. Esto resuelve muchos de los problemas que ocurren en la asignación de memoria estática, como el uso excesivo de la memoria y los programas estancados. Si bien resuelve muchos problemas, si el programador se olvida de decirle a la memoria que se descargue, la memoria dinámica puede convertirse en un problema.
Las computadoras, de forma predeterminada, utilizan la asignación de memoria estática. Esto significa que la memoria retiene los programas cuando se utilizan, incluso si el programa ya no se utiliza o si la memoria almacenada se vuelve peligrosa o un obstáculo para el rendimiento. Por ejemplo, si el usuario deja de ejecutar un programa que ocupa 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 que los usuarios avanzados suelen utilizar la asignación de memoria dinámica. El programador puede controlar todo lo relacionado con la memoria, incluido cuánto tiempo retener 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 se abran otros programas. Esto se puede hacer porque la memoria estática generalmente retiene todo lo relacionado con el programa, mientras que la memoria dinámica permite a los programadores configurarlo en un valor más bajo que contiene algunos datos, pero no todo. Al mismo tiempo, se seguirá necesitando memoria estática y se puede configurar en este esquema de asignación.
Un problema potencial con la asignación de memoria dinámica, uno que rara vez entra en juego, es que la memoria dinámica puede llenarse si el programador se olvida de establecer un valor de tiempo. Si no se establece un 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 descarga de basura, y la mayoría la tiene, se activará después de cierto tiempo para borrar la memoria. Sigue siendo una buena práctica establecer un valor de tiempo para la asignación de memoria.