科技 >

C语言中堆与栈的区别 堆和栈的概念和区别

2022-05-26 15:23:36   来源:三秦科技网

本文所说的堆栈不是指数据结构,而是C语言内存空间分配的栈空间和堆空间。

1. 栈(stack): 由操作系统自动开辟空间,函数执行完毕后,空间会被系统自动收回。申请空间效率较快,但不够灵活。栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

2. 堆(heap): 由程序员手动开辟空间,使用完后需要主动释放空间,否则可能会造成地址泄露。申请空间效率一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

来看一个网上很流行的经典例子:

main.cpp

int a = 0; 全局初始化区

char *p1; 全局未初始化区

main()

{

int b; 栈

char s[] = "abc"; 栈

char *p2; 栈

char *p3 = "123456"; 123456\0在常量区,p3在栈上。

static int c =0; 全局(静态)初始化区

p1 = (char *)malloc(10); 堆

p2 = (char *)malloc(20); 堆

}

虽然说在main()函数执行结束,堆空间还是会被操作系统自动释放。但是如果程序一直被执行,而不结束,则会造成地址泄露,出现意想不到的后果。所以说在动态开辟空间使用完毕后,一定要手动释放空间。虎头蛇尾是俗人的惯, 有始有终才是君子的操守。

栈内存:

栈内存主要用来执行程序用的,存储的是局部变量和对象的引用,凡是定义在方法中的都是局部变量,for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,一旦离开作用域,变量就会被释放。栈内存更新的速度很快,因为局部变量的生命周期很短。

栈内存可以类似看做是一个矿泉水瓶,往里面放入东西,会马上沉入底部,所以它的特点是:

先进后出,后进先出

栈的存储速度比堆要快,仅次于寄存器,栈数据是可以共享,但是缺点是,存在栈中的数据大小和生存必须是确定的,缺乏灵活

栈内存可以称为一级缓存,由垃圾回收器自动回收。

堆内存:

堆内存存储的是数组和对象(数组是特殊的对象),凡是new建立的都在堆里,堆中存放都是对象,对象用于封装数据,而且是封装多个属,如果一个属消失,这个实体也不会消失,还可以用,所以堆不会随时释放的。虽然对象不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的回收。

堆其实可以类似看做是管道,或者说是时去排队买票,特点是:先进先出,后进后出

堆是在运行时动态分配内存的,存储速度较慢

堆内存可以称为二级缓存,堆中的对象不会随时释放,一般需要开发人员自己回收它

堆和栈的区别:

1. 栈内存存储的是局部变量,而堆内存存储的是实体对象。

2. 栈的更新速度要快于堆内存,因为局部变量的生命周期很短。V栈 > V堆

3. 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

4. 共享不同,栈内存是线程私有的,堆内存是所有线程共有的。

5. 栈使用一级缓存,通常是被调用时处于存储空间,调用完立即释放。

堆存放在二级缓存中,生命周期由虚拟机的垃圾回收算法决定。

6. 堆是先进先出,后进后出,栈是先进后出,后进先出

7. 栈的空间远远小于堆的空间

标签: C语言中堆与栈的区别 堆和栈的概念和区别 堆和栈的区别 堆和栈的概念

相关阅读

Dell笔记本电脑Fn功能键怎么设置?Dell笔记

科技

要解决的问题Dell笔记本电脑在键盘的左下方有Fn键,我们以F5键的刷新功能为例。在默认设置下,要使用键盘上方的功能键时,如F5刷新,需要按Fn+F

2022-12-06

Word只能在安全模式下启动怎么办?Word只能

科技

故障表现:word突然不能正常启动,并有提示框:(遇到问题需要关闭,并提示尝试恢复。)但恢复后立即出现提示:(WORD上次启动时失败,以安全模

2022-12-06

steam未响应怎么办?steam未响应解决方法

科技

steam未响应怎么办?steam未响应刚才兴冲冲弄好游戏,点开始,和部分玩家一样没响应,在网上搜了搜解决办法,3DM那边有用替换法的,觉得太麻

2022-12-06

maxdos 9.3怎么用?maxdos工具箱9.3使用教程

科技

小编带来了maxdos 9 3使用教程,很多朋友不知道maxdos工具箱9 3怎么用,下文将会介绍maxdos工具箱9 3的功能以及相应的使用方法,有需要的

2022-12-06

腾讯qq端口是什么?腾讯qqht接口是什么?

科技

腾迅QQ的端口是什么?计算机端口是英文port的意译,可以认为是计算机与外界通讯交流的出口。腾讯的端口就是相对于一个接口,而连接的计算机

2022-12-06

Dell笔记本电脑Fn功能键怎么设置?Dell笔记本电脑Fn功能键设置步骤

科技

要解决的问题Dell笔记本电脑在键盘的左下方有Fn键,我们以F5键的刷新功能为例。在默认设置下,要使用键盘上方的功能键时,如F5刷新,需要按Fn+F

2022-12-06

Word只能在安全模式下启动怎么办?Word只能在安全模式下启动处理方案

科技

故障表现:word突然不能正常启动,并有提示框:(遇到问题需要关闭,并提示尝试恢复。)但恢复后立即出现提示:(WORD上次启动时失败,以安全模

2022-12-06

steam未响应怎么办?steam未响应解决方法

科技

steam未响应怎么办?steam未响应刚才兴冲冲弄好游戏,点开始,和部分玩家一样没响应,在网上搜了搜解决办法,3DM那边有用替换法的,觉得太麻

2022-12-06

maxdos 9.3怎么用?maxdos工具箱9.3使用教程

科技

小编带来了maxdos 9 3使用教程,很多朋友不知道maxdos工具箱9 3怎么用,下文将会介绍maxdos工具箱9 3的功能以及相应的使用方法,有需要的

2022-12-06

腾讯qq端口是什么?腾讯qqht接口是什么?

科技

腾迅QQ的端口是什么?计算机端口是英文port的意译,可以认为是计算机与外界通讯交流的出口。腾讯的端口就是相对于一个接口,而连接的计算机

2022-12-06

两个有线路由器如何连接设置?两个有线路由器的连接设置方法

科技

如果只有一个网络可以用,而却有两个有线路由器,那么怎么将其连接起来呢?本文的方法适合于路由器本身没有WDS或者两个路由器不是同一型号,

2022-12-06

wps如何加水印?wps加水印方法

科技

在一些文档中,我们常看到作者给加上了水印背景,用来显示一些特殊的信息,如下图中的***九天考资。下面我们就来看一下,这样的水印背景是

2022-12-06

如何开启360安全卫士反勒索服务?360安全卫士反勒索服务开启步骤

科技

360安全卫士是一款功能强大的电脑管理软件,有些用户出于安全考虑,想知道如何开启软件反勒索服务,接下来小编就给大家介绍一下具体的操作

2022-12-06

wcdma是什么网络?wcdma介绍

科技

WCDMA 是英文Wideband Code Division Multiple Access(宽带码分多址)的英文简称,是一种第三代无线通讯技术。W-CDMAWideband CDMA

2022-12-06

如何解决电脑QQ无法传输文件问题?电脑QQ无法传输文件解决方法

科技

QQ是现在最常用的社交、办公软件之一,有些用户遇到了电脑QQ无法传输文件问题,不知道如何解决,接下来小编就给大家介绍一下具体的操作步骤

2022-12-06

遇见旗袍是于万千人群中的惊鸿一瞥 沿途洒满了爱的芬芳

旗袍,中国和世界华人女性的传统服装,被誉为中国国粹和女性国服。虽然其定义和产生的时间至今还存有诸多争议,但它仍然是中国悠久服饰文化

北京市电影院有序恢复开放 周五预售部分场次已满座

7月21日,北京市政府发布《北京市电影局关于在疫情防控常态化条件下有序推进电影院恢复开放的通知》,宣布全市低风险地区影院,可于7月24日

近期持续强降雨影响 第46届武汉渡江节因长江水位过高取消

武汉7·16渡江节组委会14日发布公告,由于长江武汉关水位超警戒水位,按照规定取消2020年第46届武汉7·16渡江节。受近期持续强降雨影响,

“非遗”普及受众最看重“动手”参观大师工作室非常享受

过去一段时间,国家级非遗项目灰塑传承人邵成村,多次在陈家祠等工作现场,向身边那些带着好奇目光的人们讲解灰塑的种种技术细节:草根灰、

璧山冷酒夜市 丰富市民夜间文旅活动

7月13日,位于璧山区南门唐城夜市街区的璧山冷酒夜市开街。这是璧山区打造夜间经济消费载体、培育夜间经济活动品牌的举措之一。璧山市民一

年内两市超过500家上市公司完成回购 累计回购金额超332亿元

近期A股市场持续震荡,不少上市公司或其重要股东推出回购、增持计划,用真金白银力挺股价。记者根据同花顺数据统计,今年以来,两市超过500

持续发力补链强链加大研发抢占市场 渝企跑出“加速度”

玥湖路渝快电充换电站 一辆新能源汽车,离不开研发、动力、配套等多个环节。作为汽车制造重镇,重庆在这些环节的多个板块上,正在加速奔跑

重启上市公司资本运作 康佳集团去年半导体业务营业收入为3.22亿元

近日,康佳集团正式对外发布2021年年度业绩报告。2021年,康佳集团实现全年营收491 07亿元,归属于母公司的净利润为9 05亿元,同比增长89 5

伟禄集团连续6年增长 去年营收同比增长37.5%

深港通标的之一的深圳企业伟禄集团近日公布2021年业绩。财报数据显示,伟禄集团全年营业收入11 95亿港元,同比增长37 5%,连续6年稳步增长;

龙头企业去年净利倍增 整个行业营收规模有望创造历史新高位

近日,面板龙头TCL科技、京东方分别发布2021年度业绩快报,两家企业去年归属于上市公司股东的净利润分别增长129 3%、412 86%,实现超过百亿

深圳国企全力为市民 守好“菜篮子”“米袋子”保障量足价稳

疫情防控形势下,民生物资供应是否充足成为市民最为关注的问题之一。连日来,深农集团、深粮控股等企业,充分发挥国企担当,全力为深圳市民