And*_*rov 144 c++ heap terminology heap-memory
为什么运行时堆用于C风格语言中的动态内存分配,数据结构都称为"堆"?有一些关系吗?
Jam*_*lis 67
唐纳德克努特说(计算机编程艺术,第三版,第1卷,第435页):
几位作者在1975年开始将可用内存池称为"堆".
他没有说明哪些作者并没有提及任何具体论文,但确实说与优先级队列相关的术语"堆"的使用是传统意义上的.
And*_*are 54
它们具有相同的名称但它们实际上并不相似(甚至在概念上).内存堆称为堆,就像您将洗衣篮称为"衣服堆"一样.此名称用于指示一个有点混乱的地方,可以随意分配和释放内存.数据结构(如您引用的Wikipedia链接所指出的)是完全不同的.
I. *_*edy 30
名字碰撞是不幸的,但不是那么神秘.堆是一个小的,常用的词,用于表示堆,集合,组等.使用单词作为数据结构的前置日期(我很确定)内存池的名称.事实上,在我看来,游泳池对后者来说是一个更好的选择.堆意味着垂直结构(如堆),它适合数据结构,但不适合内存池.我们不认为内存池堆是分层的,而数据结构背后的基本思想是将最大元素保持在堆的顶部(和子堆).
数据结构的数据可以追溯到60年代中期; 堆内存池,早在70年代.至少早在1971年Wijngaarden在讨论Algol 时使用了术语堆(意思是内存池).
可能最早使用堆作为数据结构是七年前在
威廉姆斯,JWJ 1964 年发现的."算法232 - Heapsort",ACM通讯 7(6):347-348
查找可用内存分配的算法使用类似堆的数据结构。以下摘自http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html。
当
new被调用时,它开始寻找适合您请求大小的空闲内存块。假设找到了这样的内存块,则将其标记为保留并返回指向该位置的指针。有几种算法可以实现这一点,因为必须在扫描整个内存以找到大于对象大小的最小空闲块或返回适合所需内存的第一个块之间进行折衷。为了提高获取内存块的速度,内存的空闲和保留区域都维护在一种类似于二叉树的数据结构中,称为堆。