堆是树数据结构,其中树的较高级别总是包含比较低级别更大(或更小,如果它设置的那样)值。 “堆”是一堆程序可用于动态分配的空闲RAM。它们都被称为“堆”,但是那个与另一个有什么关系呢?
答案 0 :(得分:25)
老实说,没什么。我会想象 heap 这个词只是用它的日常(非技术)用法,并且单独应用于这两个概念作为相当不错的类比。
在第一种情况下(树数据结构意义),描述 heap 是最合适的,因为“更大”的对象放在树中更高的位置(其中“更大”由任意键确定功能) - 即在较大的物体顶部有一种较小物体的堆积(或者在顶部较大,取决于你如何看待它)。这就是我解释它的方式;无论谁首先将名称 heap 应用于此数据结构,都认为它在他的脑海中是一个合适的名称,而且它只是卡住了。
在第二种情况下(RAM的块),堆的名称可能更明显一些。 “堆”在这里只是“一个高度随意的顺序的大量集合”,这似乎适用于普通用法,就像动态分配内存块一样。
无论如何,我不会担心你可以在这两个想法之间画出抽象的隐喻相似之处。完全单独对待它们,在任何情况下都不会出错。
编辑:基于树的数据结构可能的名称取自抽象代数的heap,这在计算机科学中是相当普遍的。但是,我不想确认或否认这一点......
答案 1 :(得分:8)
在这个网站上查看免费的内存存储exploration of the origin of the name "heap"。
答案 2 :(得分:5)
它们都有相同的名称,就是它 “堆”永远不会被安排为实际的堆数据结构。
答案 3 :(得分:3)
堆(datastructure)被调用,因为如果你绘制它,它看起来像一个堆。堆(内存)被称为堆,因为它以某种方式组织但不完全。您在堆上累积数据,但可能有漏洞和不规则。就好像你把文件放在堆里一样。有时您从底部删除一个。这有一种形式的堆,即以某种方式组织但不完全。
答案 4 :(得分:2)
他们......有同样的名字!就是这样。
答案 5 :(得分:2)
两者之间唯一的关系是名称“堆”。
答案 6 :(得分:1)
无。没关系。
答案 7 :(得分:1)
进一步使问题复杂化:在某些系统(例如Microsoft Windows)上,内存分配意义上存在多个“堆”。 “堆”只是the default heap。但是,如果您拨打HeapAlloc()
,则可以选择要进行子分配的内存分配。
答案 8 :(得分:0)
来自answers.com的定义
堆:放置或抛出的一组东西,一个放在另一个上面:一堆脏衣服放在角落里。这只是基本的命名,因为以无序的方式扔东西的概念图像。正如其他海报所指出的那样,堆不是作为堆数据结构组织的。这取决于系统库中的内存分配例程(例如,检查malloc的工作原理)