7、栈和堆
运行中的程序使用两个内存区域来存储数据:栈和堆。
栈: 栈是一个内存数组,是一个LIFO(last-in first-out 后进先出)的数据结构。 栈存储几种类型的数据: 某些类型的变量的值; 程序当前的执行环境; 传递给方法的参数。 栈的特征: 数据只能从栈的顶端插入或删除; 把数据放到栈顶称为入栈(push); 从栈顶删除数据称为出栈(pop);
堆: 堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据。与栈不同,堆里的内存可以任意顺序存入和移除。 虽然程序可以在堆里保存数据,但并不能显式地删除它们。CLR的自动GC(Garbage Collector 垃圾收集器)在判断出程序代码将不会再访问某数据项时,自动清除无主的堆对象。
8、值类型和引用类型
值类型只需要一段单独的内存,用于存储实际的数据。 引用类型需要两段内存,第一段存储实际的数据,它总是位于堆中,第二段是一个引用,指向数据在堆中的存放位置。 如果数据不是其他类型的成员,值类型,数据存放在栈里。对于引用类型,实际数据存放在堆里而引用存放在栈里。 如果数据是另一个类型的成员: 引用类型对象的数据部分始终存放在堆里; 值类型对象,或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,这依赖于实际环境。 请记住,对于一个引用类型,其实力的数据部分始终存放在堆里,无论是值类型还是引用类型。 那结构(struct-值类型)数据部分中的值类型和引用类型在内存中是如何存放的呢?
值类型 引用类型预定义类型 sbyte byte float double object string short ushort int uint char decimal long ulong bool
用户定义类型 struct enum class interface delegate array
9、变量
变量时一种名称,表示程序执行时存储在内存中的数据。 c#提供了4中变量:本地变量、字段、参数、数组元素
变量在使用前必须声明: 给变量命名,并为它关联一种类型; 让编译器为它分配一块内存。
int var;变量初始化
int var = 10 ;自动初始化 变量类型 存储位置 自动初始化 用途
本地变量 栈或者栈和堆 否 用于函数成员内部的本地计算 类字段 堆 是 类的成员 结构字段 栈或堆 是 结构的成员 参数 栈 否 用于把值传入或传出方法 数组元素 堆 是 数组的成员
多重变量声明 多重变量声明中的变量必须类型相同; 变量名必须用逗号分隔,可以在变量名后包含初始化语句。
int var1 = 10 , var2, var3; string str1, int var4; // 错误,变量类型必须相同使用变量
1 int var = 10 ; // 初始化变量 2 Console.WriteLine(var); // 在控制台打印出变量的值【本文来源:香港服务器租用 http://www.558idc.com/st.html欢迎留下您的宝贵建议】