运行中的程序使用两个内存区域存储数据:栈和堆。
栈是一个内存数组,一个后进先出的数据结构。
存储数据的类型:
某些类型变量的值
程序当前的执行环境
传递给方法的参数
特征:
数据只能从栈的顶端插入和删除
把数据放到栈顶称入栈
从栈顶删除数据称出栈
堆也是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据,堆里的内存可以任意顺序存入和移除。保存的数据由CLR的自动GC(Garbage collector 垃圾收集器)进行判断清理,无法显示的删除它们。
值类型和引用类型
数据项的类型定义了存储数据需要的内存大小、数据成员、执行的函数,决定了对象的内存中的存储位置——堆和栈
类型被分为:值类型和引用类型,由内存中的存储方式决定。
值类型只需要一段单独的内存(栈),用于存储实际的数据
引用类型需要两端内存:(object,string,class,interface,delegate,array)
第一段存储实际的数据,它位于堆中
第二段是一个引用(栈中),指向数据在堆中的存放位置
引用类型对象的数据部分始终存放在堆里,值类型对象、或引用类型数据的引用部分可以存放在堆里,也可以放在栈里,这依赖于实际环境。
值参数传递的是拷贝的值;
引用参数必须在方法的声明和调用中都使用ref修饰符,传递的是引用的内存位置。