我试图找到免费商店通常被称为堆的官方(或足够好)的原因。
除了它从数据段的末尾增长之外,我无法想到一个很好的理由,特别是因为它与堆数据结构几乎没有关系。
注意:很多人都提到它只是一大堆没有组织的东西。但对我来说,术语堆物理意味着一堆物理依赖于彼此的东西。你从下面拉出一个,其他一切都在它上面坍塌,等等。换句话说,对我来说,堆松的声音组织起来(例如,最新的东西都在上面)。这并不是一个堆在大多数计算机上实际工作的方式,但如果你把东西放在堆的开头然后增长它我想它可以工作。
答案 0 :(得分:33)
Knuth拒绝使用术语“堆”作为空闲内存存储的同义词。
几位作者在1975年开始将可用内存池称为“堆”。但是在目前的系列丛书中,我们只会在与优先级队列相关的传统意义上使用该词。 ( Fundamental Algorithms,3rd ed。,p.435)
答案 1 :(得分:17)
对于它的价值而言,早于C的ALGOL68有一个实际的关键字 heap
,用于为“全局堆”中的变量分配空间,而不是{ {1}}将它分配到堆栈上。
但我怀疑使用可能只是因为它没有真正的结构。通过这种方式,我的意思是你无法保证在内存中得到最合适的块或下一个块,而是根据分配策略的想法,你会得到你所拥有的。
和大多数名字一样,一些只需要名字的编码员可能会想到这一点。
我经常听说它有时被称为竞技场(许多卫星之前的错误消息称“记忆竞技场已被破坏”)。这会在你的地址空间(电影Tron)中以角斗士的方式呈现大块记忆的图像。
最重要的是,它只是一个内存区域的名称,您也可以将其称为brk-pool或sbrk-pool(在修改它之后)或其他十几个名称中的任何一个。
我记得甚至在OSI 7层模型在某人眼中闪烁之前我们将通信协议栈放在一起时,我们使用了分层方法,并且必须在每个层中为块提供名称。
我们使用了块,段,块,部分和各种其他名称,所有这些都只是表示固定长度的东西。堆可能有类似的起源:
Carol:“嘿,Bob,对于一个只从大区域发出随机存储位的数据结构来说,这是一个好名字?”
鲍勃:“怎么样'马粪'?” 卡罗尔:“谢谢,鲍勃,我会选择'堆',如果你没事的话。顺便说一下,离婚怎么样?”
答案 2 :(得分:16)
它被命名为堆的对比图像,它让人联想到堆栈。
在一堆物品中,物品按照放置在那里的顺序一个在另一个上面,你只能移除顶部的物品(不会将整个物品翻倒)。
在堆中,项目的放置方式没有特定的顺序。您可以按任意顺序进入和移除商品,因为没有明确的“顶部”商品。
它在描述在堆栈和堆中分配和释放内存的两种方法方面做得相当不错。百胜
答案 3 :(得分:3)
这是无序的。存储的“堆”。
这不是有序的heap data structure。
答案 4 :(得分:3)
我不知道它是否是第一个,但ALGOL 68有关键字'heap'用于从可用内存堆分配内存。
'堆'的第一次使用可能发生在1958年之间,当时约翰麦卡锡为Lisp发明了垃圾收集并开发了ALGOL 68
答案 5 :(得分:2)
这是一堆乱七八糟的乱七八糟的垃圾,除非你确切知道在哪里看,否则什么都找不到。
答案 6 :(得分:1)
就像java和javascript一样,堆(免费商店)和堆(数据结构)被命名为确保我们的兄弟会对外人无法穿透,从而保证我们的工作安全。
答案 7 :(得分:1)
我总是认为与堆栈相比,它是一种巧妙的描述方式。堆就像一个杂乱无章的堆栈。
答案 8 :(得分:0)
堆通常具有以下功能:
您无法预测块malloc()返回的地址。
您不知道下一个malloc()返回的地址如何与前一个地址相关。
您可以使用可变大小的malloc()块。
所以你有一些东西可以存储一堆可变大小的块,并以一些通常不可预测的顺序返回它们。如果不是“堆”,你怎么称呼它呢?