这堆实际上是一堆吗?
可能重复:
为什么两个不同的概念都被称为“堆”?
“堆”和“堆”之间的关系是什么?
在.NET(和我所知的Java)中,动态分配对象的区域称为托管堆。 但是,大多数描述托管堆工作原理的文档都将其描述为线性数据结构,例如链接列表或堆栈。
那么,托管堆实际上是一堆,还是与其他一些数据结构一起实现呢? 如果它实际上不使用堆数据结构,似乎是一个术语的重大故障,以超载这个词的含义。
如果它实际上是一个堆数据结构,那么满足heap属性的值是多少:分配的内存区域的大小是多少?
不,堆根本不是堆排序的二叉树。 目前尚不清楚(术语)冲突是谁的缺点,但现在可以追溯到几十年前(1970年中期出现)。 本文讨论了一些历史。
从这个意义上说,“堆”是指:用于存储重要资源的特殊存储区。 在这种情况下,它与“堆数据结构”无关。
我当然没有任何权威人士对此进行评论的历史知识,但我相信用于描述.NET和Java中长寿命对象的内存分配机制的术语“堆”更像是一种唤起人们的想法,描述性词语,这是一个大的非结构化(来自开发者的观点)大量的东西存在的记忆。 相比之下,“堆栈”唤起了一个更加结构化的数据区域的图像(再次,从开发者的角度来看):堆栈中的事物“生活在哪里”比感觉堆栈中的“位置”更加相关。
这显然与实际的堆数据结构非常不同,后者使用单词“heap”来引用所谓的heap属性(来自Wikipedia):
如果B是A的子节点,则键(A)≥键(B)。
所以是的,他们实际上是无关的。 一个只是一个描述性术语,而另一个则有更正式的定义。
链接地址: http://www.djcxy.com/p/82827.html