堆栈的小理解

程序运行的时候需要为程序的每一部分开辟内存空间来存放。

可具体分为五个部分:

  1. 栈:存放的是函数的参数值,局部变量的值,编译器自动分配和释放。
  2. 堆:存放的内容由程序员自己安排。.Net中有GC回收,C++中需要程序员自己释放。
  3. 全局区(静态区):全局变量和静态变量存放区,初始化的全局变量和静态变量都放在这个区域,未初始化的全局变量和静态变量则在相邻的另一块区域。
  4. 文字常量区:常量字符串就是放在这里。
  5. 程序代码区:存放函数体的二进制代码。

栈为先进后出,堆则为无序进出。

数据入栈从高到低,即最开始入栈的数据随程序的运行,其他数据的入栈,会从高点到低点,称为压栈。

数据入堆则是先在某个表(姑且认为是记录空白内存的登记表)找寻第一个足够大小的内存空间,然后返回这个内存空间的地址,然后将数据存储进对应的内存空间,数据存放后多余的内存空间则会重新登记在表中。

 

堆栈溢出,因为每个函数占用一个栈帧,所以递归为方法中调用方法,占用过多栈帧,超过1M栈大小,会报错,堆栈溢出。

 

posted on 2015-02-01 10:15  ianism  阅读(127)  评论(0编辑  收藏  举报

导航