由于C#是一种托管语言,它的垃圾回收机制(GC)是由.net平台负责的,加之C#语言并没有指针,所以我们在使用过程中极少会考虑到内存使用状况以及项目在运行过程中是如何进行内存管理的。但是,C#只是在内存管理方面对程序员隐藏了,并不代表它不涉及这些东西,甚至其内部内存管理或许比自己手动管理更加复杂。
一. 存储类型:
当我们程序执行的时候,在内存中(不同区域)分配有四种主要的类型:值类型,引用类型,指针,指令。
1) 值类型:
在C#中,继承自System.ValueType的类型被称为值类型,主要有以下几种(CLR2.0中支持类型有增加):
* bool*byte* char* decimal* double* enum* float
* int* long* sbyte* short* struct* uint* ulong* ushort
2) 引用类型:
以下是引用类型,继承自System.Object:
* class*interface* delegate* object* string
3) 指针:
在内存区中,指向一个类型的引用,通常被称为“指针”,它是受CLR( Common Language Runtime:公共语言运行时)管理,我们不能显示使用。需要注意的是,一个类型的引用即指针跟引用类型是两个完全不同的概念。指针在内存中(栈区)占一块内存区,它本身只代表一个内存地址(或者null),它所指向的另一块内存区(堆区)才是我们真正的数据或者类型。
当我们使用引用类型的时候,一般是对指针进行的操作而非引用类型对象本身。但是值类型则操作其本身。
二. 内存分区