C语言看图说话-堆区与栈区的区别

1.内存区域有哪些?

答:内存区域通常分为5大区域,分别是存储函数的代码区,存储不变常量的常数区,存储全局变量和静态static变量的全局/静态区,还有堆区和栈区。通常来讲,代码区是低地址的,栈区是高地址的。

2.什么样的变量在栈区?

答:一般是临时性的局部变量,再调用函数时会在栈中创建出临时变量,在执行完毕后会自动回收掉。一般更长久的变量会存放在堆区,并且需要手动回收。

3.堆区与栈区的特性是什么?

答:从空间大小来看,堆区的空间较大,栈区的空间较小。生长方向他们是相向生长的。分配方式和管理方式;栈区是自动分配和自动回收的。而堆区是手动分配和手动回收的。从分配效率来看,栈区是在调用函数的时候直接自动分配出来的;而堆区是要执行malloc和calloc时分配的,也就是相当于手动分配,所以栈区的效率更高。堆区可能会产生碎片,所以需要手动进行回收,而栈区则不会。

4.堆区不释放的后果会怎样?

答:会产生碎片,在堆积到一定程度时可能会导致程序崩溃,所以我们通常会在栈区创建一个指针,来指向堆区中内容的地址。在使用后通过free指针来进行空间释放,并且要使指针指向空(NULL),避免后续的操作问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值