中易网

C++中堆和栈的区别

答案:1  悬赏:20  
解决时间 2021-02-17 04:52
C++中堆和栈的区别
最佳答案
堆和栈的区别
管理方式不同
栈,由编译器自动管理,无需程序员手工控制;堆:产生和释放由程序员控制。
空间大小不同
栈的空间有限;堆内存可以达到4G,。
能否产生碎片不同
栈不会产生碎片,因为栈是种先进后出的队列。堆则容易产生碎片,多次的new/delete
会造成内存的不连续,从而造成大量的碎片。
生长方向不同
堆的生长方式是向上的,栈是向下的。
分配方式不同
堆是动态分配的。栈可以是静态分配和动态分配两种,但是栈的动态分配由编译器释放。
分配效率不同
栈是机器系统提供的数据结构,计算机底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令。堆则是由C/C++函数库提供,库函数会按照一定的算法在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。
堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,我们推荐大家尽量用栈,而不是用堆。
栈和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好一些。
无论是堆还是栈,都要防止越界现象的发生。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
华硕笔记本电脑把电池拆掉,接上电源开不了机
家人失踪,怎么能查到他最后QQ登录地址和时间
by2在炫舞时代里面唱的歌有什么?
形象设计怎么去啊,有事要去办理
不知道为什么每次电脑一玩英雄联盟。,数字键
1到2013的最大质因数是多少
百世快递(溪湖东路)地址在哪,我要去那里办事
4.5-4.5×0.98怎样简算
(探索题)如图所示,某蜗牛从坐标原点O出发
3dmax 怎么贴法线贴图
康佳智能电视5O寸9600ue怎样才能开机直接进入
电磁阀可以用于液氧吗
一个月有前有一个女的叫我出去,她刚和男朋友
电梯性能参数中候梯时间多少秒怎么求出来
我爱上一个人他叫黄少天,他虽然很吵很烦但是
推荐资讯
男女朋友一般交往多久,才接吻的
股权式合资结构和契约型合资结构有什么区别
2万块以内能买的到劳力士吗
路由器连接上不能用为什么
问道手游如何绕过模拟器检测
农村建房子一厅三房该怎么建才好看?
创业培训机构是不是真的
发动机三缸和四缸哪个更省油
有南京六合到苏州的火车么
为什么楼下房间拍篮球,感觉像楼上拍的?
壹号超市这个地址在什么地方,我要处理点事
无线路由器桥接之后分配静态IP的问题
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?