动态内存分配中使用的堆与数据结构之间的连接是什么?

时间:2010-03-09 16:36:25

标签: c++ data-structures heap heap-memory

  

可能重复:
  Why are two different concepts both called “heap”?

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

那么,这只是堆的重载意义,可以这么说,还是有某种连接?

3 个答案:

答案 0 :(得分:5)

Heap是标准称为免费商店的同义词。与用于函数调用和函数本地对象存储的堆栈相比,堆在许多实现上以相反的方向(从上到下)增长(而不是堆栈 - 从底部到顶部增长)。当然,标准都不需要这些。

另一方面,堆数据结构完全不同 - 它是具有某些属性的专用树结构。

有些实现可能会使用堆数据结构进行自由存储管理,因此可能已经派生了该名称。 (见buddy memory allocation。)

答案 1 :(得分:2)

不,程序堆与堆数据结构不同。换句话说,没有关系。 This question详细讨论了程序堆。

答案 2 :(得分:0)

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