为什么在c风格的语言中运行时堆被用于动态内存分配,而数据结构都被称为“堆”?有什么关系吗?


当前回答

实际上,读到内存分配的方式(参见Buddy Blocks)让我想起了数据结构中的堆。

其他回答

Donald Knuth说(《计算机编程艺术》,第三版,第1卷,第435页):

1975年左右,一些作者开始将可用内存池称为“堆”。

他没有说哪些作者,也没有给出任何特定论文的参考文献,但他确实说了,与优先级队列相关的术语“堆”的使用是这个词的传统意义。

也许第一个实现的内存堆是由堆结构管理的?

它们有相同的名字,但实际上并不相似(甚至在概念上)。内存堆被称为堆,就像你把洗衣篮称为“一堆衣服”一样。这个名字用来表示一个有点混乱的地方,可以随意分配和释放内存。数据结构(正如你参考的维基百科链接所指出的)是完全不同的。

在我看来,这两个完全不相关的东西有相同的名字只是一个意外/巧合。就像图和图。

实际上,读到内存分配的方式(参见Buddy Blocks)让我想起了数据结构中的堆。