首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆实际上是堆吗?

堆实际上是堆吗?
EN

Stack Overflow用户
提问于 2011-01-08 19:42:40
回答 4查看 1.9K关注 0票数 21

可能的重复: 为什么两个不同的概念都被称为“堆”? “a”堆和“堆”之间有什么关系?

在.NET (据我所知,还有Java )中,动态分配对象的区域称为托管堆。但是,描述托管堆工作方式的大多数文档将其描述为线性数据结构,例如链接列表或堆栈。

那么,托管堆实际上是一个,还是用其他数据结构实现的呢?如果它实际上不使用堆数据结构,那么似乎是术语的重大失误,无法使这个词的意思过载。

如果它实际上是堆数据结构,那么满足堆属性的值是什么:分配的内存区域的大小?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-08 19:44:58

不,堆根本不是堆序二叉树。(对我来说)术语冲突是谁的错还不清楚,但这两种堆的使用都可以追溯到几十年前(它似乎是1970年中期)。在这篇文章中讨论了一些历史。

票数 20
EN

Stack Overflow用户

发布于 2011-01-08 19:51:13

我当然没有足够的历史知识对此发表任何权威的评论,但我认为,用于描述.NET和Java中更长寿命对象的内存分配机制的“堆”一词更像是一种唤起性的、描述性的词,它是一种大型的非结构化内存(从dev的角度来看),它是存在大量内存的地方。相反,“堆栈”则唤起了一个更结构化的数据区域的映像(同样,从开发人员的角度来看):“在堆栈上”的东西感觉比“它们生活在堆上的地方”更相关。

这与实际的堆数据结构非常不同,它使用“堆”一词来指所谓的堆属性(来自维基百科):

如果B是A的子节点,则键(A)≥键(B)。

所以是的,它们实际上是不相关的。一个只是一个描述性的术语,而另一个则有一个更为正式的定义。

票数 2
EN

Stack Overflow用户

发布于 2011-01-08 19:50:07

从这个意义上说,“堆”是指用于存储重要资源的特殊内存区域。在这种情况下,它与“堆数据结构”无关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4635758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档