您的位置:首页 >资讯 > 热点 >

堆和栈的区别是什么?堆与栈代表什么含义?

2020-10-10 10:17:01    来源:趣味硬件

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:

(1)程序内存布局场景下,堆与栈表示的是两种内存管理方式;

(2)数据结构场景下,堆与栈表示两种常用的数据结构

1.程序内存分区中的堆与栈

栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。参考如下代码:

其中函数中定义的局部变量按照先后定义的顺序依次压入栈中,也就是说相邻变量的地址之间不会存在其它变量。栈的内存地址生长方向与堆相反,由高到底,所以后定义的变量地址低于先定义的变量,比如上面代码中变量s的地址小于变量b的地址,p2地址小于s的地址。栈中存储的数据的生命周期随着函数的执行完成而结束。

2堆简介

堆由程序员分配释放, 若程序员不释放,程序结束时由OS回收,分配方式倒是类似于链表。参考如下代码:

其中p1所指的10字节的内存空间与p2所指的10字节内存空间都是存在于堆的。堆的内存地址生长方向与栈相反,由低到高,但需要注意的是,后申请的内存空间并不一定在先申请的内存空间的后面,即p2指向的地址并不一定大于p1所指向的内存地址,原因是先申请的内存空间一旦被释放,后申请的内存空间则会利用先前被释放的内存,从而导致先后分配的内存空间在地址上不存在先后关系。堆中存储的数据的若未释放,则其生命周期等同于程序的生命周期。

关于堆上内存空间的分配过程,首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序。另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确地释放本内存空间。由于找到的堆节点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表。

3堆与栈区别

堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别:

(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小64bits的Windows默认1MB,64bits的Linux默认10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

从以上可以看到,堆和栈相比,由于大量malloc()/free()或new/delete的使用,容易造成大量的内存碎片,并且可能引发用户态和核心态的切换,效率较低。栈相比于堆,在程序中应用较为广泛,最常见的是函数的调用过程由栈来实现,函数返回地址、EBP、实参和局部变量都采用栈的方式存放。虽然栈有众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,主要还是用堆。

无论是堆还是栈,在内存使用时都要防止非法越界,越界导致的非法内存访问可能会摧毁程序的堆、栈数据,轻则导致程序运行处于不确定状态,获取不到预期结果,重则导致程序异常崩溃,这些都是我们编程时与内存打交道时应该注意的问题。

标签:

相关阅读

精彩放送

秦岭淮河一线是什么的分界线?气候方面有何不同?

常山赵子龙常山位于什么地方?常山具体地理位置

怎么看银行卡的开户行是哪个支行?具体操作步骤

颁金节是哪个民族的节日?颁金节是哪一天?

去除不干胶的小窍门有哪些?护手霜能去掉吗?

侗族主要分布在哪个省?侗族历史源流有哪些说法?

上海公交支付方式有哪些?如何享受优惠?

环龙控股今日在港上市 开盘价1.27港元/股

全域低风险!古城西安“活力”回归迎新春

新春走基层|4个象群32头野象现身野象谷

广东去年进出口首超8万亿元 十大贸易工程增强发展韧性

多措并举提升城乡居民收入

洞悉宇宙的“中国天眼”——五百米口径球面射电望远镜

中国东航实业心系一线员工送关爱 点滴真情暖人心

冷链防疫为何屡屡暴雷 构建智慧冷链系统势在必行

健康义诊,防控三高,金水宝制药x漱玉平民大药房新春公益活动惠及百姓

百利好2022年 恭贺新春 福虎献瑞

护航大国制造,PPE破浪前行——第104届中国劳保会4月登陆上海

春节送礼白酒清单,九暹酒你不该错过

再度横扫娱乐圈!比音勒芬俘获吴奇隆等男神,延续“王子的选择”

这个春节,跟着男神吴尊学穿搭,把比音勒芬国潮“福”运穿上身!

加盟大平台,继往又开来!怡亚通全球招募合伙人共同做大做强

同心同行,共商共赢!智联会&玉龙祥股东会暨年会圆满成功

VR数字科技 推动驾培行业转型创新

宁夏将深入推进土地权改革 综合施策破除制度瓶颈

第一产粮大省黑龙江今年将新建高标准农田1100万亩

8年开出4000多家门店,俏妃经期护理缘何成为女性刚需

重视心理健康教育 让更多学生感受到积极的能量

全国猪肉供应形势怎样?猪价向上拐点是否已经来临?

取消护工降低护理费引关注 反映老百姓的迫切需求

“不买年”成新年关键词:挑战自己不买不需要的东西

让农民工安“薪”返乡 根治欠薪冬季专项行动观察

遏制过度营销、野蛮生长 给盲盒市场划一条法律红线

30省份公布2022年GDP目标 谁最雄心勃勃?

中东部地区有大范围雨雪天气 陕西山西等地有大雾

跨越时空,世界青年新春同框打卡 “佳节好物·一起过节”活动在京举行

促进算法推荐技术规范健康发展

香港故事丨香港凤园:300多年保护生态的传承

我在新疆迎冬奥:来布尔津邂逅冰雪乐趣

我在新疆迎冬奥:库马什·库力斯坦的体育之家

MAKUKU麦酷酷宣布完成新一轮战略融资,融资金额或高达3000万美金

【地评线】太阳鸟时评:警惕年轻干部成长“黄金期”异化为贪腐“危险期”

艺韵丝语——张宝华教授丝巾艺术展暨新年文创分享会圆满落幕

冬奥来了丨牧民“策马踏雪” 送国家越野滑雪队出征!

相约冰雪,一起来|少年不老·野冰

一起出发!“我是火炬网络护跑手”主题网络宣传活动启动

A股旅游业龙头股上市公司一览 中国中免业绩如何?

化学制药概念股龙头有哪些?恒瑞医药业绩如何?

2022年硫酸股票的龙头股有哪些?丽珠集团相关介绍

东易日盛受邀参观冬奥赛区,助力冬奥会保障!

九牛一毛打一生肖谜底是什么?快来看看吧!

豪美转债今日申购 预计一手可盈利200元

打新股中签怎么样?亚信安全发行市盈率87.17倍

东微半导新股申购 发行总数1684.41万股

预眸——仿生疗愈护肤行业引领品牌,专为亚洲女性量身定制

星星冷柜“新鲜守味”,全年不打烊

华润万象生活拟收购两物管企业 交易总对价不超33.2亿

通美晶体超四成收入来自AXT 扭亏为盈经营现金流反降43%

都是“名场面”! 手绘漫画带你回顾天津抗疫瞬间

隔离酒店的儿童画,藏着这样的暖心故事!

海军打一字谜底是什么?滨字组词有哪些?

日照航海技术学校2022年招收初中毕业生火热报名中!

跌停开盘!九安医疗回应收购微软:没有任何可能

本周连上七天班 春节加班工资这样算

润邦股份最高预盈3.4亿 广州国资入主在即

上市险企2021年实现保费收入2.49万亿 整体增长放缓

爱建集团拟1.28亿元投资华贵人寿 将成第四大股东

【新春走基层】守护旅客安全回家路

夜间出击淬铁翼

关口前移防控金融风险

【读懂开局之年成绩单】持续激发市场主体活力

帮村里建产业 助学子稳就业

排隐患 建规范 强监管(关注农村自建房)

峡谷清幽 山乡秀美(寻找最美乡村·岩铺村)

跃上冰雪,拥抱快乐寒假

投身志愿,服务燃情冬奥

辟谣!网传“益和香猪肉牵出清立源益生菌,中益智信六级代理团队计酬涉嫌违法违规 ”一...

林海雪原撒野之旅——智取威虎山试驾捷途汽车

《金工錾刻技法》新书发布会在京举行

2022开年城市一线观察 | “巴适”之地寻变记——“活力之城”成都2022开年观察

万物皆可OATLY,燕麦奶开启中式烘焙与植物奶品类结合

春运返程火车票开售 网上退票24小时办理

江苏平安消防集团有限公司荣获2020年度“纳税信用A级纳税人”称号

奶粉竞争新格局:喜唯特正式入局儿童奶粉赛道

空间站生活忙碌又精彩 神舟十三航天员太空旅程过半

全国首次中成药集中带量采购开标 药价瘦身百姓减负

30省份今启动教师资格考试报名 这些变化要注意

28省份GDP出炉!广东闯入“世界前十”,多地破重要关口

七部门:2025年我国绿色低碳循环发展消费体系初步形成

三同源如一幸福智道:2021年12月25日亮相央视少儿春晚舞台

新春走基层·巡江记 | 这152公里的长江岸线藏着怎样的生态密码?

看哭!烈士妻子从结婚9个月分离等到94岁,阔别70多年“再相见”

就在明天!

音乐先锋 湾区放歌:国内首发音乐数字藏品--元音链

预防大于治疗,俏妃经期护理唤活女性生殖健康自生力

俏妃经期护理凭何为女性健康筑起防火墙

关切民生,助力环保 | 广东省政协委员贺惠山为广东发展建言献策

冰雪之约丨在这座南方城市里,有一个“冰球联合国”

【深度解读】如何借年货节打造超级爆品?抖音超品日破局有招

小红书回应被行政处罚30万 系未成年信息审核漏放问题

北京冬奥会开幕式举行第二次带妆彩排

59个世界冠军!杨扬的“A级人生”一路向前

王老吉与携程共祝出行大吉,吉祥伴你一路同行

买菜干净又舒心

西安:春节期间蔬菜供应充足 每日可上市2000余吨

新春走基层|这对“95后”姐妹花 是襄渝铁路上的电力“蜘蛛侠”

河南安阳:雪天防疫忙 配送不停歇

流调员的一封信让网友“破防”:请允许我用“战友”相称