免费商店“堆”这个词的起源是什么?
我试图找到官方(或足够好的理由),免费商店通常被称为堆。
除了它从数据段的末尾增长的事实,我不能真正想到一个好理由,特别是因为它与堆数据结构很少有关。
注意:不少人提到,这只是一大堆没有组织的东西。 但对我而言,物理这个术语意味着一堆物理上相互依赖的物体。 你从下面拉出一个,其他所有东西都会倒塌,等等。换句话说,对我来说,堆听起来松散地组织起来(例如,最新的东西在最上面)。 这实际上并不是大多数计算机上的堆实际上是如何工作的,尽管如果你把东西放在堆的开头,然后增加它,我想它可以工作。
Knuth拒绝将“堆”这个词用作免费内存商店的同义词。
几位作者于1975年开始将可用内存池称为“堆”。 但是在目前的系列书中,我们只会使用与优先级队列相关的传统意义上的这个词。 (Fundamental Algorithms,第3版,第435页)
它被命名为堆对比图像,它让人想起堆栈。
在一堆物品中,物品按照它们放置的顺序依次排列,并且只能删除最上面的物品(不会颠覆整个过程)。
在堆中,没有特定的顺序来放置物品。 您可以按照任何顺序进入和取消物品,因为没有明确的“顶部”物品。
它在描述堆栈和堆中分配和释放内存的两种方式方面做得相当不错。 百胜!
值得注意的是,早于C的ALGOL68有一个实际的关键字heap
,用于为“全局堆”中的变量分配空间,而不是在堆栈中分配它的loc
。
但我怀疑这种使用可能只是因为它没有真正的结构。 因此,我的意思是,你不能保证在内存中获得最适合的区块或下一个区块,而是根据分配策略的意愿,采取你所得到的。
最喜欢的名字,它可能是由某些编码器认为(在这种情况下,我猜丹尼斯里奇,肯·汤普森或布赖恩Kernighan的,所以不是真的只是一些编码)谁只是需要一个名字。
我经常听说它有时被称为竞技场(来自许多卫星之前的错误消息,称“内存竞技场已经损坏”)。 这带来了你的地址空间内的角斗士风格的战斗大片的图像(电影特伦)。
底线,它只是一个内存区域的名称,您可以称它为brk-pool或sbrk-pool(在修改它的调用之后)或任何其他名称。
我记得,即使在OSI 7层模型在某人眼中闪烁之前,我们将通信协议栈放在一起时,我们使用了分层的方法,并且必须在每个层上为块提供名称。
我们使用块,段,块,部分和各种其他名称,所有这些只是表示固定长度的东西。 这可能是堆有类似的起源:
"Hey, Bob, what's a good name for a data structure that just doles out random bits of memory from a big area?"
"How about 'steaming pile'?"
"Thanks, Bob, I'll just opt for 'heap', if that's okay with you. By the way, how are things going with the divorce?"
上一篇: What is the origin of the term "heap" for the free store?
下一篇: Where are static members stored in memory? stack/ heap in C# .Net