¿Por qué se usa el montón de tiempo de ejecución para la asignación dinámica de memoria en lenguajes de estilo C y la estructura de datos llamada "el montón"? ¿Hay alguna relación?
c++
heap
terminology
heap-memory
Andrey Fedorov
fuente
fuente
Respuestas:
Donald Knuth dice (The Art of Computer Programming, Third Ed., Vol. 1, p. 435):
No dice qué autores y no da referencias a ningún artículo específico, pero sí dice que el uso del término "montón" en relación con las colas de prioridad es el sentido tradicional de la palabra.
fuente
Tienen el mismo nombre pero realmente no son similares (incluso conceptualmente). Un montón de memoria se llama montón de la misma manera que se referiría a una cesta de lavandería como un "montón de ropa". Este nombre se usa para indicar un lugar un tanto desordenado donde la memoria se puede asignar y desasignar a voluntad. La estructura de datos (como señala el enlace de Wikipedia al que hace referencia) es bastante diferente.
fuente
La colisión de nombres es desafortunada, pero no tan misteriosa. Heap es una palabra pequeña y común que se usa para referirse a una pila, colección, grupo, etc. El uso de la palabra para la estructura de datos precede (estoy bastante seguro) al nombre del grupo de memoria. De hecho, el grupo habría sido una opción mucho mejor para este último, en mi opinión. El montón connota una estructura vertical (como una pila), que se ajusta a la estructura de datos, pero no al conjunto de memoria. No pensamos en un montón de grupo de memoria como jerárquico, mientras que la idea fundamental detrás de la estructura de datos es mantener el elemento más grande en la parte superior del montón (y sub-montones).
La estructura de datos se remonta a mediados de los años 60; amontonar el grupo de memoria, principios de los 70. El término montón (que significa grupo de memoria) fue utilizado al menos ya en 1971 por Wijngaarden en las discusiones sobre Algol.
Posiblemente, el primer uso del montón como estructura de datos se encuentra siete años antes en
Williams, JWJ 1964. "Algoritmo 232 - Heapsort", Comunicaciones del ACM 7 (6): 347-348
fuente
En realidad, leer sobre la forma en que se asigna la memoria (ver Bloques de amigos ) me recuerda un montón de estructuras de datos.
fuente
En mi opinión, es simplemente un accidente / coincidencia que estas dos cosas completamente no relacionadas tengan el mismo nombre. Es como gráfico y gráfico .
fuente
La estructura de datos de tipo montón se utiliza mediante un algoritmo para encontrar la asignación de memoria disponible. Lo siguiente está extraído de http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .
fuente
Los términos coloquiales stack stack y heap memory no se usan en el estándar C ++. El estándar utiliza almacenamiento estático, almacenamiento de subprocesos, almacenamiento automático y almacenamiento dinámico.
Se puede encontrar más en la sección Duración de almacenamiento de la norma.
Por lo tanto, desde el punto de vista del lenguaje y la biblioteca estándar, no hay confusión.
fuente
P. ¿Qué es un montón? A. Un montón es una colección de objetos colocados uno encima del otro.
Responda a su pregunta: tanto el almacenamiento dinámico de memoria como el almacenamiento binario utilizan el mismo concepto que usted conoce. Los datos se almacenan en forma de un montón en la memoria en el mismo orden en que están escritos en el programa, mientras que el montón binario es una estructura de datos que sigue el mismo concepto de almacenamiento de datos de forma ordenada en forma de un montón (Datos en la parte superior del otro). Déjame saber lo que piensas en la sección de comentarios.
fuente
¿Quizás el primer montón de memoria implementado fue administrado por una estructura de montón?
fuente