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

来源:三秦科技网时间:2022-05-26 15:39:27

本文所说的堆栈不是指数据结构,而是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语言中堆与栈的区别 堆和栈的概念和区别 堆和栈的区别 堆和栈的概念

相关阅读

推荐阅读

“羲和号”首次获得三种太阳谱线轮廓

“羲和号”首次获得三种太阳谱线轮廓

‘羲和号’发射后,已经在空间首次同时获得了太阳全日面Hα谱线、Si I谱线和Fe I谱线的精细结构和光谱成像,以及几十个太更多

2022-07-20 14:24:32
飞秒激光“点亮”空气形成3D影像 飞秒激光显示技术难在哪?

飞秒激光“点亮”空气形成3D影像 飞秒激光显示技

伴随嗞嗞作响的击穿声,虹拓科技日报五角星等汉字和图形悬空呈现,肉眼能观、双手可触。7月19日,科技日报记者在武汉东湖高新区虹拓超快激更多

2022-07-20 14:23:22
环氧乙烷:冰激凌里的“砒霜” 作口罩消毒剂却“真香”

环氧乙烷:冰激凌里的“砒霜” 作口罩消毒剂却“

近日,某知名品牌冰激凌被检出含有毒且致癌成分——环氧乙烷。事发后,有网友表示,这次检出的致癌物,也被用来给日常佩戴的口罩消毒,这样更多

2022-07-20 14:19:01
溶于泪液的硅纳米针隐形眼镜面世 未来或有望用于治疗人类眼部疾病

溶于泪液的硅纳米针隐形眼镜面世 未来或有望用于

美国普渡大学、密歇根大学与韩国汉阳大学、弘益大学和国立金乌工科大学的研究人员携手开发出一种内嵌纳米针的隐形眼镜,其可溶于泪液,未来更多

2022-07-20 14:14:04
为什么雄蟑螂不能吸引雄蟑螂? 蟑螂“恋爱”奥秘被科学家破译

为什么雄蟑螂不能吸引雄蟑螂? 蟑螂“恋爱”奥秘

为什么雄蟑螂不能吸引雄蟑螂?为什么雄蟑螂更喜欢性成熟的雌蟑螂?蟑螂近30年来的恋爱奥秘被科学家破译了。蟑螂是蜚蠊目昆虫俗称,包括有美洲更多

2022-07-20 14:06:30
清华大学固体氧化物电解池制氢系统样机开发项目通过验收

清华大学固体氧化物电解池制氢系统样机开发项目通

7月16日,清华大学固体氧化物电解池(SOEC)制氢系统样机开发项目验收会议在北京召开。中国科学院院士、清华大学教授欧阳明高,清华大学副研更多

2022-07-20 14:04:36
realme x配置怎样? realme x有呼吸灯吗?

realme x配置怎样? realme x有呼吸灯吗?

realme x配置怎样realme x配置情况:6 53英寸三星AMOLED全面屏,屏占比达91 2%,前置采用1600万脉冲式升降摄像头,升降寿命可达20万次。更多

2022-07-19 16:03:52
北京打造人工智能产业新生态 构筑创业者乐土营造以创新为荣氛围

北京打造人工智能产业新生态 构筑创业者乐土营造

无人驾驶、智慧工厂、远程医疗……如今,人工智能(AI)技术在北京被广泛应用于金融、交通、医疗、安防、教育等领域,为社会经济高质量发展赋更多

2022-07-11 10:22:09
+ 点击查看更多精彩

精彩放送

上月70城房价 34个城市跌回2年前占据70城的近一半
    根据国家统计局发布的2022年6月份70个大中城市商品住宅销售价格变...
金融管理部门:房地产销售和融资同步回暖 积累的需求开始释放
    随着稳经济大盘政策落地显效,叠加全国疫情逐步好转,积累的需求...
房地产行业仍处于深度调整期回暖未及预期 政策内容逐渐向限购限贷等方面延伸
    2022年上半年,房地产行业仍处于深度调整期,回暖未及预期。且全...
中交地产成“涨幅王” 渝股今年上半年表现如何?
    渝股今年上半年表现如何? 截至2022年7月1日收盘,沪深65家重庆A...
“小麦大蒜换房” 中小城市为卖房有多拼?是否有本末倒置之嫌?
    近日,河南某开发商推出小麦换房大蒜换房活动。其中,小麦按照2元...
5月份商品住宅销售价格同比涨幅回落或降幅扩大 同比下降城市个数增加
    5月份商品住宅销售价格同比涨幅回落或降幅扩大——国家统计局城市...
    最新见闻