我试图找到免费商店通常被称为堆的官方(或足够好)的原因.
除了它从数据段的末尾增长之外,我无法想到一个很好的理由,特别是因为它与堆数据结构几乎没有关系.
注意:很多人都提到它只是一大堆没有组织的东西.但对我来说,术语堆物理意味着一堆物理依赖于彼此的东西.你从下面拉出一个,其他一切都在它上面坍塌,等等.换句话说,对我来说,堆松的声音组织起来很糟糕(例如,最新的东西在上面).这并不是一个堆在大多数计算机上实际工作的方式,但如果你把东西放在堆的开头然后增长它我想它可以工作.
Knuth拒绝使用术语"堆"作为空闲内存存储的同义词.
几位作者在1975年开始将可用内存池称为"堆".但是在目前的系列丛书中,我们只会在与优先级队列相关的传统意义上使用该词.(基础算法,第3版,第435页)
对于它的价值而言,早于C的ALGOL68有一个实际的关键字 heap
,用于为"全局堆"中的变量分配空间,而不是loc
在堆栈上分配它.
但我怀疑使用可能仅仅是因为它没有真正的结构.通过这种方式,我的意思是你不能保证在内存中得到最合适的块或下一个块,而是根据分配策略的想法,你会得到你所拥有的.
像大多数名字一样,一些只需要名字的编码员可能会想到这一点.
我经常听说它有时被称为竞技场(许多卫星之前的错误消息称"记忆竞技场已被破坏").这会在你的地址空间(电影Tron)中以角斗士的方式呈现大块记忆的图像.
最重要的是,它只是一个内存区域的名称,您也可以将其称为brk-pool或sbrk-pool(在修改它之后)或其他任何名称中的任何一个.
我记得甚至在OSI 7层模型在某人眼中闪烁之前,当我们将通信协议栈放在一起时,我们使用分层方法并且必须在每个层上为块提出名称.
我们使用块,段,块,部分和各种其他名称,所有这些都只是表示固定长度的东西.堆可能有类似的起源:
Carol:"嘿,Bob,对于一个只从大区域发出随机内存的数据结构来说,这是一个好名字?"
鲍勃:"怎么样'马粪'?"
卡罗尔:"谢谢,鲍勃,我会选择'堆',如果那对你好的话.顺便问一下,离婚怎么样?"
它命名为它依靠于一个对比鲜明的图像堆栈.
在一堆物品中,物品按照放置在那里的顺序一个在另一个上面,你只能移除顶部的物品(不会将整个物品翻倒).
在堆中,对项目的放置方式没有特定的顺序.您可以按任意顺序进入和移除项目,因为没有明确的"顶部"项目.
它在描述在堆栈和堆中分配和释放内存的两种方法方面做得相当不错.百胜!