C/C++堆和栈的区别
来源:互联网 发布:厦门大学网络教育 编辑:程序博客网 时间:2024/06/07 08:27
堆和栈的区别
1. 管理方式不同
栈,由编译器自动管理,无需程序员手工控制;堆:产生和释放由程序员控制。
2. 空间大小不同
栈的空间有限;堆内存可以达到3.9G(如果你的内存4G)。
3. 能否产生碎片不同
栈不会产生碎片,因为栈是种先进后出的队列。堆则容易产生碎片,多次的new/delete会造成内存的不连续,从而造成大量的碎片。
4. 生长方向不同
堆的生长方式是向上的,栈是向下的。
5. 分配方式不同
堆是动态分配的。栈可以是静态分配和动态分配两种,但是栈的动态分配由编译器释放。
6. 分配效率不同
栈是机器系统提供的数据结构,计算机底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令。堆则是由C/C++函数库提供,库函数会按照一定的算法在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。
l 堆和栈相比,由于大量new/delete的使用,容易造成大量的内存碎片;由于没有专门的系统支持,效率很低;由于可能引发用户态和核心态的切换,内存的申请,代价变得更加昂贵。所以栈在程序中是应用最广泛的,就算是函数的调用也利用栈去完成,函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。所以,我们推荐大家 尽量用栈,而不是用堆。
l 栈和堆相比不是那么灵活,有时候分配大量的内存空间,还是用堆好一些。
l 无论是堆还是栈,都要防止越界现象的发生。
数组是栈区的。
- 堆和栈的区别(C/C++)
- 【C/C++】堆和栈的区别
- 【C/C++】堆和栈的区别
- 堆和栈的区别 (C++)
- C++-堆和栈的区别
- c/c++ 堆和栈的区别
- C++-堆和栈的区别
- 【C++】堆和栈的区别
- c语言堆和栈的区别
- c++:堆和栈的区别
- c语言堆和栈的区别
- C语言堆和栈的区别
- c语言 栈和堆的区别
- 【C++】堆和栈的区别
- C-堆和栈的区别 [2]
- 堆和栈的区别 -- C
- C-堆和栈的区别
- c/c++ 堆和栈的区别
- Play on Words——字母首尾相连
- ArrayList
- 常用CSS样式总结
- 本文整理了四种在MySQL中修改root密码的方法
- 初次在Android上运行opencv app时,出现的错误,以及解决
- C/C++堆和栈的区别
- URIs, URLs, and URNs
- 树莓派(raspberry pi)学习4: 更改键盘布局
- IIS信息服务器&花生壳网站发布及总结
- leetcode_Permutations II _hard_暴力枚举法--回溯法
- 树状数组
- PyCharm 教程(五)断点 调试
- 数据库集群技术漫谈
- 服务器负载均衡的基本功能和实现原理