为什么在c风格的语言中运行时堆被用于动态内存分配,而数据结构都被称为“堆”?有什么关系吗?
当前回答
在c++标准中并没有使用通俗的术语堆栈内存和堆内存。该标准使用静态存储、线程存储、自动存储和动态存储。
更多信息可以在标准的存储时间部分找到。
因此,从语言和标准库的角度来看,不存在混淆。
其他回答
问:堆是什么? A.堆是放在彼此上面的对象的集合。
回答你的问题: 内存堆和二进制堆都使用相同的概念。 数据以堆的形式存储在内存中,顺序与程序中写入的顺序相同,而二进制堆是一种数据结构,它遵循以堆的形式有序存储数据的相同概念(数据在其他数据之上)。 请在评论区告诉我你的想法。
The name collision is unfortunate, but not all that mysterious. Heap is a small, common word used to mean a pile, collection, group, etc. The use of the word for the data structure pre-dates (I'm pretty sure) the name of the pool of memory. In fact, pool would have been a much better choice for the latter, in my opinion. Heap connotes a vertical structure (like a pile), which fits with the data structure, but not the memory pool. We don't think of a memory-pool heap as hierarchical, whereas the fundamental idea behind the data structure is keeping the largest element at the top of the heap (and sub-heaps).
堆的数据结构可以追溯到60年代中期;堆积记忆池,70年代初。术语堆(指内存池)至少早在1971年由Wijngaarden在Algol的讨论中使用。
可能最早使用堆作为数据结构是在 威廉姆斯,1964年。“算法232 -堆排序”,ACM通信7(6):347-348
也许第一个实现的内存堆是由堆结构管理的?
它们有相同的名字,但实际上并不相似(甚至在概念上)。内存堆被称为堆,就像你把洗衣篮称为“一堆衣服”一样。这个名字用来表示一个有点混乱的地方,可以随意分配和释放内存。数据结构(正如你参考的维基百科链接所指出的)是完全不同的。
实际上,读到内存分配的方式(参见Buddy Blocks)让我想起了数据结构中的堆。
推荐文章
- 如何通过参数和重定向stdin从一个文件到程序运行在gdb?
- 为什么两个不同的概念都叫“堆”?
- 为什么这个结合赋值和相等检查的if语句返回true?
- 如何找到Java堆大小和内存使用(Linux)?
- cplusplus.com给出的错误、误解或坏建议是什么?
- 找出质数最快的算法是什么?
- c++枚举类可以有方法吗?
- 格式化IO函数(*printf / *scanf)中的转换说明符%i和%d之间的区别是什么?
- 将析构函数设为私有有什么用?
- main()中的Return语句vs exit()
- 为什么c#不提供c++风格的'friend'关键字?
- 在函数的签名中添加关键字
- 我如何在Visual Studio中预处理后看到C/ c++源文件?
- 为什么在标准容器中使用std::auto_ptr<>是错误的?
- 用比较double和0