栈与堆的区别-好汉002
问题:
- 什么是栈?什么是堆?
- 区别?
- 为什么要分成两种内存方式?
解答:
第一问:
- 栈编译器自动分配 ;堆是程序需要时,才分配;
第二问:
- 栈:由低地址向高分配,且内存大小有限,1到2M,可调整;在同一个栈中,内存连续,因此中同一个函数块中读不同的局部值类型数据,速度比堆快;
- 堆:由高地址向地址分配,内存受限于系统虚拟内存,因此内存很大;由于变量名中在栈中分配4个字节存储堆的起始位,产生非数据内存,同样由于当需要堆内存时,系统是向管理堆内存的链表查询并分配,所以不同引用变量的堆地址不同,使程序询问速度减低。分配过程也耗时。
- 栈有专业寄存器管理,堆则间接寻址。
第三问:
- 主要是内存不确定性,当程序运行中,由于各种情况的需要,内存需要不断增减,为了稳定程序,需要将动态的内存分开。栈能较好保存上下文,堆则满足内存的动态扩展 ;
ps:待各位指出不足与更深入部分