0

计算机科学中有两个名为“堆”的概念。一个是内存管理中使用的内存池,另一个是算法。

我知道它们是不同的,但它们之间的关系是什么?或者他们只是碰巧有相同的名字?

4

1 回答 1

0

据我所知,他们只是碰巧有相同的名字。

一个“堆”是在其头部包含集合的最大元素的数据结构。因为它的子元素必须比它小,所以它是一个半分类集合。这比在某些情况下维护完全排序的列表更有效,例如当您通常只对最大元素感兴趣时。http://en.wikipedia.org/wiki/Heap_(data_structure)

另一个“堆”是内存中除了可以存储堆栈数据的地方。存储在堆栈中的数据的问题在于,当函数返回时,它会被释放,因此会丢失,而且在溢出之前堆栈只能容纳这么多。堆的“结构”通常是空闲数据段的链表 - malloc 寻找满足大小要求的数据段,将其标记为正在使用并返回它,而 free 在堆,将其标记为未使用并将其放回空闲数据段的链表中。(其他优化包括为某些块大小设置专用链表。)

如您所见 - 根本不相关!

于 2013-04-17T01:16:48.263 回答