堆和栈的区别
一般认为在c中分为这几个存储区
1栈 - 有编译器自动分配释放
2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块
区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
- 程序结束释放
4另外还有一个专门放常量的地方。 - 程序结束释放
区别:
2、栈的空间大小有限定,vc的缺省是2M,堆的空间大小是没有限定的
3、栈有系统管理,堆有程序员管理,所以堆用不好会发生内存泄漏
4、频繁的new和free,堆上会产生内存碎片,栈不会
5、栈比在堆上存取数据快些,栈更快速高效,
6、栈是有系统支持的,而堆是有函数库提供的
7、只有少数数据类型列入int、float等会在栈上分配,大多数用户类型都在堆上。
8、栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一
1栈 - 有编译器自动分配释放
2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块
区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
- 程序结束释放
4另外还有一个专门放常量的地方。 - 程序结束释放
区别:
2、栈的空间大小有限定,vc的缺省是2M,堆的空间大小是没有限定的
3、栈有系统管理,堆有程序员管理,所以堆用不好会发生内存泄漏
4、频繁的new和free,堆上会产生内存碎片,栈不会
5、栈比在堆上存取数据快些,栈更快速高效,
6、栈是有系统支持的,而堆是有函数库提供的
7、只有少数数据类型列入int、float等会在栈上分配,大多数用户类型都在堆上。
8、栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一