问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲?

发布网友 发布时间:2022-04-27 08:09

我来回答

4个回答

热心网友 时间:2022-06-28 22:14

将堆跟栈放在一起将是因为两者都是存储数据的方式。区别如下:

一、主体不同

1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。

2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。


二、特点不同

1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。

2、栈:是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。

三、作用不同

1、堆:堆是非线性数据结构,相当于一维数组,有两个直接后继。

2、栈:可以用来在函数调用的时候存储断点,做递归时要用到栈。


参考资料来源:百度百科-堆

参考资料来源:百度百科-栈

热心网友 时间:2022-06-28 22:15

1、堆、堆栈、栈
堆和栈都和编译、编程有关。但很多老师在讲具体的程序设计语言时,重点在语法。将它们跳过,或简单地称其为堆栈。堆栈是内存的逻辑层面的东西。在谈论上层应用时,经常忽略它们。久而久之就出现了“堆栈”这个混乱的术语。但这个术语已经存在,大多数人提到堆栈时,意思是“栈”,所以它成为约定俗成,那么你只能接受。堆是heap。栈是stack。堆栈就是栈。

2、进程、线程 与 堆、栈
现在是多任务系统。每个进程是资源(不含处理器资源)分配的基本单位。每个进程含若干线程。线程是调度执行的基本单位。同一个进程的多个线程可以共享所属进程的资源。程序员可以进行同步控制(多线程编程)。
每个进程有一个或几个堆。这要看不同的OS了。程序员要在堆中分配/释放空间,需要malloc free这样的显式操作。java中的new操作,建立对象,其实也间接执行了malloc这样的操作。对象的回收其实也要执行free。不过是包装了一下而已。
每个线程有一个私有资源,那就是栈。函数调用时,要把返回地址和参数入栈。被调函数执行时,要把参数取出来,赋给形参。被调函数执行完后还要把返回地址取出来,跳回去。栈是自动实现的,不需要程序员干预。(因为编译器实现了)。局部变量也位于栈。

3、内存管理分页机制
Windows / Linux采用段页式。但这只是内存管理方法。跟堆栈是两回事啊。并不矛盾。

热心网友 时间:2022-06-28 22:15

堆栈 = 栈 = Stack
用malloc(),free()分配的就叫堆

热心网友 时间:2022-06-28 22:16

程序的运行场所是内存,栈和堆是进程的虚拟内存中的两部分区域。
当程序被执行时,程序代码,你所创建的变量、常量等都会被压入栈空间里,栈是程序代码的执行区域。栈的内存地址是连续的且被一一记录,所以说当你创建了一个变量(比如int var = 1),我们就可以通过var这个变量来访问变量的内容。在这里,var就存放在栈中,它的地址已经默认被编译器计算好了,调用过程也不需要你涉及到有关地址的操作。更直观的感受是数组,数组里的元素在栈里面是连续排放的,相邻两个元素的地址相差1。
而堆是不同于栈的另一部分区域,系统会给每个程序分配一部分栈空间让他们能够运行起来,问题就是栈空间必然存在不够用的问题,而堆不属于程序,堆是独立的,是公用的。只要你malloc(sizeof(SIZE_YOU_WANT)),就可以得到相应一部分的堆空间。

有栈,为什么用堆?
::栈里面的东西有生命周期,说俗点就是变量作用域,你在函数内部创建一个变量,函数调用结束这个变量就没了。而堆里面的东西独立于你的程序,malloc()之后,除非你free()掉,否则一直存在。

为什么用堆少?
::麻烦!

有什么要注意?
::堆里面申请的东西,是随机分配的,不像栈里面的地址都已经计算好了。所以申请了堆空间之后一定要创建一个指针保存你说申请到的堆空间的地址。不然就找不到你申请的空间了。
既然涉及到指针,请注意用之前检查一下指针空不空的问题。
堆空间的东西申请好,在用完之后一定要free()掉,以防止堆溢出。
说到安全性,还真是挺麻烦的。(纯手打)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ipad mini2怎么看小说 关于ipadmini的几点疑惑 苹果平板图书阅读软件推荐推荐一个苹果可以用的免费看小说app 风冷无霜为什么噪音大 华为matepad11多大尺寸的 applewatch可以发微信语音吗? 人类基因组组成 仅从染色体照片(黑白非显带的)能否区别X染色体和C组染色体? ...车子加速不上来是什么原因,节气门清洗过了也不行? 换了变数箱油洗了节气门 提速慢了 停下来起步根本没力气 java 任意数据类型 堆栈 栈在C中怎么实现? C语言中的栈、堆是什么? 试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操作 我19岁,混合性皮肤,适合用大宝的哪些产品呢 线性表、栈、队列有何异同? 大宝家的明星产品有哪些? 如何用两个堆栈模拟实现一个队列 关于大宝产品 设两个栈(stack1,stack2)共享一个一维数组空间s[m],它们的栈底分别设在数组的两端,试编写一个算法, 大宝系列产品 什么树名? 用一维整数数组实现数据结构中的堆栈(Stack)。(用java语言) 大宝系列产品的使用顺序 各种树的名称 英文 数据结构(C语言)两个栈共存储在一个长度为n的一维数组中…… 大宝系列的哪个好用? 假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两 求世界上各种类型的树的名字和特点? 大宝产品有哪些?每款的具体价格是多少? R语言中 两个数组元素怎样堆叠 用链表实现堆栈或队列是什么意思 C/C++中字符串数组在堆栈里是怎么分配的?高手请进 C语言版数据结构 关于四则运算的堆栈问题:请高人指出到底哪儿错了 数组和指针在堆栈中的区别,详见下图 汇编语言 堆栈? 一个奇怪的C语言问题,涉及到指针、数组、堆栈、以及printf,希望C语言大神们帮帮忙。 如何从一个数组中查找指定的元素,并返回这个元素在数组中的位置 温度的物理量符号,质量的物理量符号,时间的物理量符号,长度的物理量符号,体积的物理量符号 热理学温度的物理量符号是什么 温度 质量 时间 长度的物理符号 温度,质量,时间,长度的物理量符号是what 摄氏温度:物理量的表示符号为( ),它的单位叫( ),单位符号为( ) 温度是表示物体______的物理量,它的常用单位用______(写符号)表示.水的比热容是4.2×103焦/(千克?℃ 能跳跃的小昆虫有哪些 物理:初温度用什么字母表示,末温度用什么字母表示 会跳的虫子是什么虫如何消灭? 家里有很多这种小虫子 很小,会跳 这是什么虫子啊 怎么消灭呢 会弹跳,像蜘蛛一样,黑白斑点花纹,这是什么昆虫?有毒性么? 这是什么虫子?会蹦