堆和栈的区别

落爺英雄遲暮 提交于 2020-03-08 15:03:21
一般认为在c中分为这几个存储区 

1栈 - 有编译器自动分配释放 
2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 
3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块 
区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 
- 程序结束释放 
4另外还有一个专门放常量的地方。 - 程序结束释放 


区别:
2、栈的空间大小有限定,vc的缺省是2M,堆的空间大小是没有限定的
3、栈有系统管理,堆有程序员管理,所以堆用不好会发生内存泄漏
4、频繁的new和free,堆上会产生内存碎片,栈不会
5、栈比在堆上存取数据快些,栈更快速高效,
6、栈是有系统支持的,而堆是有函数库提供的
7、只有少数数据类型列入int、float等会在栈上分配,大多数用户类型都在堆上。
8、栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!