¿Qué es un montón de memoria?
¿Qué es un montón de memoria?
Presumiblemente te refieres al montón desde el punto de vista de la asignación de memoria, no desde el punto de vista de la estructura de datos (el término tiene múltiples significados).
Una explicación muy simple es que el montón es la porción de memoria donde reside la memoria asignada dinámicamente (es decir, la memoria asignada mediante malloc
). La memoria asignada desde el montón permanecerá asignada hasta que ocurra una de las siguientes situaciones:
- La memoria está
free
guardada. - El programa termina
Si se pierden todas las referencias a la memoria asignada (por ejemplo, ya no se almacena un puntero a ella), se produce lo que se llama una pérdida de memoria . Aquí es donde todavía se ha asignado la memoria, pero ya no es posible acceder a ella fácilmente. La memoria perdida no se puede recuperar para futuras asignaciones de memoria, pero cuando finaliza el programa, el sistema operativo liberará la memoria.
Compare esto con la memoria de pila , que es donde viven las variables locales (aquellas definidas dentro de un método). La memoria asignada en la pila generalmente sólo vive hasta que la función regresa (hay algunas excepciones a esto, por ejemplo, variables locales estáticas).
Puede encontrar más información sobre el montón en este artículo .
Un montón de memoria es una ubicación en la memoria donde se puede asignar memoria mediante acceso aleatorio.
A diferencia de la pila donde la memoria se asigna y libera en un orden muy definido, los elementos de datos individuales asignados en el montón generalmente se liberan de manera asincrónica entre sí. Cualquier elemento de datos de este tipo se libera cuando el programa libera explícitamente el puntero correspondiente, y esto puede dar como resultado un montón fragmentado. Por el contrario, solo se pueden liberar los datos en la parte superior (o en la parte inferior, dependiendo de la forma en que funciona la pila), lo que da como resultado que los elementos de datos se liberen en el orden inverso al que fueron asignados.
El montón es solo un área donde se asigna o desasigna memoria sin ningún orden. Esto sucede cuando uno crea un objeto usando el new
operador o algo similar. Esto se opone a la pila donde la memoria se desasigna según el primero en entrar, el último en salir.
Es una porción de memoria asignada desde el sistema operativo por el administrador de memoria que utiliza un proceso. Las llamadas a malloc()
etc. toman memoria de este montón en lugar de tener que tratar directamente con el sistema operativo.