Stack与Heap的区别
2016-04-05 17:13
197 查看
申明:这里所说的栈和堆是程序内存管理中的栈和堆,而不是数据结构里的栈和堆。
(1)保存的内容不同:栈里保存的是局部变量,而堆里保存的是动态申请的变量。
(2)栈里的内存系统自动申请和释放,程序执行出申请的区域,内存就会自动释放,而栈里的内存需要手动地申请和释放(malloc/free、new/delete)。如果不及时释放会造成内存泄漏(Memory Leak)现象的发生。
(3)栈的可用大小由编译器确定,是一个常数,因此可能出现溢出的现象,堆的大小由系统可用虚拟内存确定,所以堆的可用内存大小更灵活。
(4)栈的内存是连续的,堆的内存可能是不连续的。
(5)栈向低地址生长,堆向高地址生长。
(6)栈的存取效率比堆的存取效率高。
(1)保存的内容不同:栈里保存的是局部变量,而堆里保存的是动态申请的变量。
(2)栈里的内存系统自动申请和释放,程序执行出申请的区域,内存就会自动释放,而栈里的内存需要手动地申请和释放(malloc/free、new/delete)。如果不及时释放会造成内存泄漏(Memory Leak)现象的发生。
(3)栈的可用大小由编译器确定,是一个常数,因此可能出现溢出的现象,堆的大小由系统可用虚拟内存确定,所以堆的可用内存大小更灵活。
(4)栈的内存是连续的,堆的内存可能是不连续的。
(5)栈向低地址生长,堆向高地址生长。
(6)栈的存取效率比堆的存取效率高。
相关文章推荐
- 0405 构建之法第4章 读后感
- Vector 多字段排序的Java实现
- High Avalibility Cluster
- opencv
- 2016蓝桥杯B组——NO.4
- 微信支付调用JSAPI缺少参数:timeStamp
- 傻瓜版Latex(WinEdt)的bib…
- 算法导论学习笔记-1-基础排序算法
- Unity 捕捉Android按键
- iOS 宏(define)与常量(const)的正确使用
- Oracle所有约束
- appium通过iOS的predicate的模糊或精确匹配使用-ios uiautomation方式寻找元素
- Github——入门笔记
- vim编辑16进制
- Div Article Setion三者的区别
- matlab编译为exe的一些问题
- CODE[VS] 1043 方格取数
- python数据库模块
- 网络netstat awk 分析
- 析构函数中不应该抛出异常(摘录)