栈是一个内存数组,是一个LIFO(后出先进)的数据结构。栈存储几种类型的数据:
1.某些类型变量的值;
2.程序当前的执行环境;
3.传递给方法的参数。
堆是一块内存区域,在堆里可以分配大块的内存用于存储某类型的数据对象。与栈不同,堆里的内存能够以任意顺序存入和移除。
通过GC自动清除无主的堆对象。
类型初分为两种:值类型和引用类型,这两种类型的对象在内存中的存储方式不同。
1.值类型只需一段单独的内存,用于存储实际的数据。
2.引用类型需要两段内存。
a.第一段存储实际的数据,它总是位于堆中。
b.第二段是一个引用,指向数据在堆中的存放位置。(引用存放在栈里)
值类型:
预定义类型
sbyte,byte,float,short,ushort,double,int,uint,char,long,ulong,decimal,bool
用户定义类型
struct,enum
引用类型:
预定义类型
object,string,dynamic
用户定义类型
class,interface,delegate,array