2011-01-08 13 views
16

duplicados posibles:
Why are two different concepts both called “heap”?
What's the relationship between “a” heap and “the” heap?¿El montón es realmente un montón?

En .NET (y Java por lo que yo sé), el área donde los objetos se asignan dinámicamente que se conoce como el montón administrado . Sin embargo, la mayoría de documentation que describe cómo funciona el almacenamiento dinámico administrado lo representa como una estructura de datos lineal, como una lista vinculada o una pila.

Entonces, ¿el montón administrado realmente es heap, o está implementado con alguna otra estructura de datos? Si en realidad no utiliza una estructura de datos de montón, parece una falla significativa de la terminología sobrecargar el significado de esta palabra.

Si de hecho es una estructura de datos de montón, ¿cuál es el valor que satisface la propiedad de montón: el tamaño de la región de memoria asignada?

+0

+1 Ya me he preguntado sobre esta pregunta. –

+0

También vea http://stackoverflow.com/questions/1699057/why-are-two-different-concepts-both-called-heap –

Respuesta

14

No, el montón no es un heap-ordered binomial tree en absoluto. No está claro (para mí) de quién es la culpa del choque de terminología, pero ambos usos de la fecha del montón datan de hace décadas (parece que a mediados de 1970). Parte de la historia se discute en this article.

+1

Posiblemente el montón de palabras ha adquirido un significado propio más allá de la estructura de datos como terminología convencional. Quiero decir, ¿qué más podríamos llamar y cómo lo enseñaríamos sin llamarlo "montón"? –

+1

+1 para la referencia histórica del The Art of Computer Programming. –

+0

@John K: No soy hablante nativo (de inglés), por lo que "heap" no significa mucho para mí, a excepción de los dos usos disjuntos en informática. IIUC, el uso convencional es sinónimo de "pila". –

0

No estoy seguro de mi respuesta, pero por lo que sé en idiomas como C# o Java, donde la memoria está administrada, mi recolector de basura no es lineal. El GC libera la memoria que puede liberarse y cuando la memoria es baja, compacta la memoria realizando algún tipo de desfragmentación. Mueve los bloques de memoria que usa el programa para crear un espacio en "el final". ¿Por qué necesita esta respuesta? ¿Desea realizar alguna gestión de memoria de bajo nivel?

1

En este sentido, "montón" significa: un área de memoria especial utilizada para almacenar recursos importantes. En ese contexto, no está relacionado con la "estructura de datos del montón".

1

Ciertamente no tengo el conocimiento histórico para comentar esto con ninguna autoridad, pero creo que el término "montón" como se emplea para describir el mecanismo de asignación de memoria para objetos de larga duración en .NET y Java es más intencionado como una palabra evocadora, descriptiva y parecida a una palabra, esta gran masa de memoria desestructurada (desde el punto de vista del desarrollador) en la que viven cosas. La "pila" en contraste evoca la imagen de una región de datos mucho más estructurada (nuevamente, desde el punto de vista del desarrollador): "dónde" las cosas viven en la pila se siente mucho más relevante que "dónde" viven en el montón.

Esto es claramente muy diferente de la actual heap data structure, que utiliza la palabra "montón" para referirse a la llamada propiedad del montículo (de Wikipedia):

si B es un nodo hijo de A, luego tecla (A) ≥ tecla (B).

Así que sí, en realidad no tienen relación. Uno es solo un término descriptivo mientras que el otro tiene una definición mucho más formal.