为什么将用于对象分配的主内存称为“堆”?


10

有谁知道为什么将分配对象的主内存区域称为堆。我可以理解LIFO堆栈的基本原理,但想知道“堆”名称的基本原理是什么。


2
我没有零的历史或证据来支持这一点,但是我会押注堆栈是第一位的,用英语来说,堆基本上是堆栈的对立面,所以当出现的东西不是堆栈且没有结构保证时,堆刚来到介意某组人,它的传播语言一样容易..
吉米·霍法

2
@JimmyHoffa:您可能不远。在过去(对我来说,大约是8086),堆和堆栈朝相反的方向增长,堆栈从底部(内存末端)向上增长,而堆从顶部(用户内存开始)增长。 ) 下。
罗伯特·哈维

4
@DeadMG:这就是为什么我们要关闭此事,如果没有足够的代表来投票结束,请主持人标记。失败的话,您可以在评论中链接到重复项。无论如何,我都进行了搜索,找不到任何骗子。
罗伯特·哈维,

1
结束语-这个问题很热门。请参阅最近的Meta问题以获取更多详细信息。具有讽刺意味的是,该元问题已列在我的社区公告列表中。

Answers:


7

根据StackOverflow上的信息- 免费商店的“堆”一词的起源是什么?为什么是两个不同的概念都被称为“堆”?

此信息至少可以追溯到1975年的Knuth,引用了其他(未命名)作者:

几位作者于1975年左右开始将可用内存池称为“堆”。但是在本系列丛书中,我们只会在与优先级队列相关的更传统意义上使用该词。(计算机编程的艺术-基本算法,第3版,第435页)

还提到了Wijngaarden在1970年代初期关于Algol的讨论,其中将可用内存池称为堆(heapAlgol中的保留字,在地方被定义为“从全局堆中分配一些自由空间。”)-Algol68从1968年开始)。

从1970年开始实施ALGOL 68堆可能会用于跟踪单词起源的某些方面,尽管如果它位于付费专区后面,则可能会很多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.