栈(stack)是按后进先出(LIFO)原则存储数据项的一种数据结构。在计算机系统中,栈特指处理器支持的一块内存区域,其中保持着局部变量。栈中内存的分配为向下生长。
C#中,值类型(如整数类型)就分配在栈中,栈内存区域内保存着值类型的值,内存区域可以通过变量名来引用。
引用类型(如object)分配在堆中(heap)。堆是为对象分配空间的内存区域。对象分配在堆中时,返回的是地址,地址被赋值给引用。堆中内存分配为向上生长。
栈中的对象在超出作用域(栈帧)时,将被销毁。通常栈帧(stack frame)是由一个函数定义的,如果在函数声明了一个局部变量,放在栈中的对象将在函数结束时销毁。
堆中的对象会在指向它的最后一个引用销毁后被回收。