栈与堆的区别-好汉002

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

ps:待各位指出不足与更深入部分

posted @ 2013-10-19 09:22  火影jia  阅读(130)  评论(0编辑  收藏  举报