3

可能重复:
为什么两个不同的概念都称为“堆”?

我用谷歌搜索,但找不到这个问题的答案;动态内存分配中使用的堆和数据结构之间有什么联系?堆上的内存是否以类似于堆数据结构的方式组织?如果是这样,这似乎很奇怪,因为获取内存应该是随机访问 AFAIK(即 O(1)),但是从堆中查找项目并不是在恒定时间内完成的。

那么,这只是堆的重载含义,可以这么说,还是有某种联系?

4

3 回答 3

5

堆是标准所称的自由存储的同义词。与用于函数调用和函数本地对象存储的堆栈相比,堆在许多实现中以相反的方向(从上到下)增长(与堆栈相反——从下到上增长)。当然,这些都不是标准所要求的。

另一方面,堆数据结构完全不同——它是一种具有某些属性的特殊树结构。

某些实现可能使用堆数据结构进行自由存储管理,名称可能是从那里派生的。(请参阅伙伴内存分配。)

于 2010-03-09T16:40:17.650 回答
2

不,程序堆不同于堆数据结构。换句话说,没有关系。这个问题详细讨论了程序堆。

于 2010-03-09T16:39:12.540 回答
0

没有关系,但我承认这个名字可能会令人困惑。内存中的堆是操作系统分配给程序的数组。堆由用于快速查找的程序实现。

于 2010-03-09T16:39:28.307 回答