Montón (memoria)

Un montón ( eng.  heap ) en informática y programación  es el nombre de una estructura de datos que implementa memoria de aplicación asignada dinámicamente .

Tamaño del montón  : la cantidad de memoria asignada por el sistema operativo (SO) para almacenar el montón (debajo del montón).

Cómo funciona

Cuando se inicia un proceso , el sistema operativo asigna memoria para acomodar el montón. En el futuro, la memoria para el montón (bajo el montón) se puede asignar dinámicamente.

El programa de usuario, utilizando funciones como , puede obtener punteros a áreas de memoria pertenecientes al montón. Los programas usan el montón para albergar estructuras de datos creadas dinámicamente. El programa puede liberar memoria usando funciones como . malloc()free()

La memoria heap se puede dividir en usada (asignada a un programa que usa o funciones similares) y libre (todavía no ocupada o ya liberada usando funciones o similares). malloc()free()

Para almacenar información sobre qué área del montón está ocupada y cuál está libre, generalmente se usa un área adicional de memoria.

Antes de que se inicie el programa, se inicializa el montón, durante el cual la memoria asignada para el montón se marca como libre.

Una función como esta hace algo como esto: malloc()

Una función como esta hace algo como esto: free()

El programa puede estar seguro de que entre llamadas a funciones como y , el área de memoria marcada como ocupada no será reasignada. Después de una llamada o una función similar, el área de memoria se liberará y luego podrá reutilizarse o entregarse al sistema operativo. El uso de un puntero a un área de memoria liberada hará que el programa se bloquee o se ejecute de forma impredecible. malloc()free()free()

Algoritmos y rendimiento

El montón es un área contigua de memoria dividida en áreas ocupadas y libres (bloques) de varios tamaños.

La información sobre áreas libres y ocupadas del montón se puede almacenar en listas de varios formatos. El rendimiento de funciones como y depende directamente del formato de lista seleccionado , ya que estas funciones pasan la mayor parte de su tiempo buscando en la lista de áreas adecuadas. malloc()free()

Para aumentar el tamaño del montón y funciones similares, use una llamada al sistema (llame a una función del sistema operativo). En este caso, se produce un cambio de contexto del espacio del usuario al espacio del núcleo del sistema operativo y viceversa. Buscar en la lista de áreas de montón usadas/libres es más rápido que cambiar de contexto, por lo que es más rentable usar una llamada al sistema una vez para asignar un área de memoria grande para el montón y luego asignar áreas más pequeñas al programa desde el área grande existente mientras manteniendo una lista de áreas usadas/libres. malloc()

El número de elementos incluidos en la lista de áreas de montón ocupadas/libres se puede reducir fusionando elementos que contienen información sobre áreas sucesivas. Esto reducirá el tiempo de recorrido de la lista.

Cada elemento de la lista puede almacenar la dirección de un área de memoria, su tamaño, información sobre el área siguiente (para búsqueda hacia adelante) y/o anterior (para búsqueda hacia atrás).

Ejemplo de implementación

Cree varias listas para almacenar información sobre áreas del mismo tamaño o similares. Lista de selección basada en el tamaño del área.

Véase también

Funciones de la biblioteca estándar de C