为什么在c风格的语言中运行时堆被用于动态内存分配,而数据结构都被称为“堆”?有什么关系吗?
当前回答
在c++标准中并没有使用通俗的术语堆栈内存和堆内存。该标准使用静态存储、线程存储、自动存储和动态存储。
更多信息可以在标准的存储时间部分找到。
因此,从语言和标准库的角度来看,不存在混淆。
其他回答
实际上,读到内存分配的方式(参见Buddy Blocks)让我想起了数据结构中的堆。
Donald Knuth说(《计算机编程艺术》,第三版,第1卷,第435页):
1975年左右,一些作者开始将可用内存池称为“堆”。
他没有说哪些作者,也没有给出任何特定论文的参考文献,但他确实说了,与优先级队列相关的术语“堆”的使用是这个词的传统意义。
它们有相同的名字,但实际上并不相似(甚至在概念上)。内存堆被称为堆,就像你把洗衣篮称为“一堆衣服”一样。这个名字用来表示一个有点混乱的地方,可以随意分配和释放内存。数据结构(正如你参考的维基百科链接所指出的)是完全不同的。
在我看来,这两个完全不相关的东西有相同的名字只是一个意外/巧合。就像图和图。
也许第一个实现的内存堆是由堆结构管理的?