¿Qué es un montón de memoria?

Resuelto H4cKL0rD asked hace 14 años • 8 respuestas

¿Qué es un montón de memoria?

H4cKL0rD avatar Feb 22 '10 11:02 H4cKL0rD
Aceptado

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:

  1. La memoria está freeguardada.
  2. 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 .

LeopardSkinPillBoxHat avatar Feb 22 '2010 04:02 LeopardSkinPillBoxHat

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.

mjv avatar Feb 22 '2010 04:02 mjv

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 newoperador o algo similar. Esto se opone a la pila donde la memoria se desasigna según el primero en entrar, el último en salir.

fastcodejava avatar Feb 22 '2010 05:02 fastcodejava

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.

Ignacio Vazquez-Abrams avatar Feb 22 '2010 04:02 Ignacio Vazquez-Abrams