黑马程序员------堆栈

来源:互联网 发布:cisco 端口聚合 编辑:程序博客网 时间:2024/05/29 14:02

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------  

程序运行时,它的数据必须存储在内存中,一个数据项需要多大的内存,存储在什么地方,以及如何存储都依赖于该数据项的类型。

  运行中的程序使用两个内存区域来存储数据:堆和栈
  栈是一个内存数组,是一个LIFO(last-in first-out)后进,先出的数据结构,栈存储几种类型的数据;
  某些类型变量的值
  程序当前的执行环境
  传递给方法的参数。
  栈的特征
  数据只能从栈的顶端插入和删除
  把数据放入栈的顶端称为入栈(push)
  从栈顶删除数据称为出栈(pop)
  堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据。与栈不同,堆里的内存可以任意顺序存入和移除。
  虽然程序可以在堆中存储数据,但并不能显示的删除它们,clr的自动GC(garbage collector,垃圾回收器)在判断出程序的代码将不会再访问某数据项是,自动清理无主的对象。
  数据项的类型定义了存储数据需要的内存大小、组成该类型的数据成员、该类型能够执行的函数、对象在内存中存储的位置--堆和栈
  值类型值需要一段单独的内存,用于存储实际的数据
  引用类型需要两端内存:
    第一段存储实际的数据,它总是位于堆中
    第二段是一个引用,只想数据在堆中的位置。
  数据如果不是其他类型的成员,
  对于值类型,数据存储在栈中,对于引用类型,实际数据存储在堆中,引用存储在栈中
  数据如果是其他类型的成员
    引用类型的数据部分始终存放在堆中
    值类型对象,或引用类型数据的引用部分可以存放在堆中,也可以存放在栈中,这依赖于实际环境
  变量声明
  变量在使用之前必须声明。变量声明定义了变量,并完成了2件事
  给变量命名,并给他关联一种类型
  让编译器为他分配一块类型
  一个简单的变量声明至少需要一个类型和名称
  除声明变量的类型和名称外,声明还可以把他的内存初始化为一个明确的值
  无初始化语句的本地变量有一个未定义的值,在未赋值之前不能使用

  一些类型的变量如果声明时没有初始化语句,那么会自动设为默认值,而另一些则不能。

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------