问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

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

发布网友 发布时间:2022-04-29 21:19

我来回答

4个回答

热心网友 时间:2023-10-09 06:57

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

一、主体不同

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

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


二、特点不同

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

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

三、作用不同

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

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


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

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

热心网友 时间:2023-10-09 06:57

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

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

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

热心网友 时间:2023-10-09 06:58

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

热心网友 时间:2023-10-09 06:58

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

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

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

有什么要注意?
::堆里面申请的东西,是随机分配的,不像栈里面的地址都已经计算好了。所以申请了堆空间之后一定要创建一个指针保存你说申请到的堆空间的地址。不然就找不到你申请的空间了。
既然涉及到指针,请注意用之前检查一下指针空不空的问题。
堆空间的东西申请好,在用完之后一定要free()掉,以防止堆溢出。
说到安全性,还真是挺麻烦的。(纯手打)
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
IE 打不开 打开IE浏览器出现“Windows无法访问指定设备、路径或文件... 我的电脑重装系统以后IE浏览器不见了,我下载了然后提示说不适合版本... 有什么品牌的定妆粉性价比高? 油皮男生怎样挑选性价比高的定妆粉? 在网上挂了省二院的号,微信支付的,没有卡想取消钱退到哪里呢?_百度... 请问与赤霉素,细胞分裂素,脱落酸,相对应的生长调节剂分别是什么,谢谢... 北京哪个医院心脏科好 唐老师樱桃授粉药配方 儿童头部牛皮癣需要怎么去治疗 青春期的孩子得了银屑病,有什么要注意的吗 月亮每秒绕地球运行8千米,地球绕太阳每秒29千米,地球比月亮多运行多少千米 地球绕太阳每秒运行多少千米? 月亮每秒绕地球行8千米,地球绕太阳每秒行29千米.地球比月亮每秒多行______千米. 地球绕太阳每秒运行约30什么? 地球绕太阳每秒运行29米还是千米 梦见未婚夫在结婚前夕移情别恋 地球绕太阳的运行速度(单位:千米/秒) 婚期将近 两次梦见未婚夫出轨是什么意思 第一次梦见他出轨是当着我的... 地球绕太阳每秒运行多少千米米 地球绕太阳每秒运行29__ 千牛卖家包邮包退,是不是要买什么运费险 江南超市买了一气味大米煮熟还有一股塑料味 自热米饭加热时有很浓塑料气味,挺臭的,吃一次会对身体有害吗 自热米饭加热时有很浓塑料气味,挺臭的,吃一次会对身体有害吗用? 大米粥有塑料味是大米的问题吗 外卖的米饭有塑料味? 塑料大米是真的吗,真的能吃吗? iPhone 6怎么解决闪退问题? 为什么iphone6微博和qq经常卡或者闪退 我手机iphone6,下载好新浪微博之后一打开就是这个页面,我输入成功之后就闪退了,怎么回事呀。求 请问地球绕太阳每秒运行多少千米 结婚前老是梦到老公出轨或者自己流产不好的事情 地球绕太阳转每秒运行多少千米 C语言中堆和栈的区别? 月亮每秒绕地球行8千米,地球每秒绕太阳行29千米,地球比月亮每秒多行多少千米? 月亮每秒绕地球转8公里,地球每秒绕太阳转29公里,地球比月亮每秒多转几公里? 最近常梦见男友未婚夫出轨是什么意思?诚心求解 裤子裁剪教程,超级简单,推荐零基础收藏 C++中堆和栈的区别 地球每秒钟绕太阳运行29千米,月亮每秒钟绕地球运行8千米,那么地球绕太阳运行的速度是月亮绕地球的几 月亮每秒绕地球行8千米,地球每秒绕太阳行29千米,地球比月亮每秒多行______千米.求大神帮助 地球绕太阳每秒运行29千米,月亮绕地球每秒运行8000米 磊科高性能路由器上网行为怎么管理配置 cpu-z读取的内存条频率为什么只有真实值的一半 买了个磊科上网行为管理路由器netcore NR235P但不怎么会设置 cpuz内存频率只有一半 内存频率为什么只显示一半 电信100M宽带,使用磊科NR238上网行为管理路由器QOS设置问题 内存条DEAM频率只有一半 怎么解决? 磊路由器上网行为管理dns域名过滤如何设置
  • 焦点

最新推荐

猜你喜欢

热门推荐