托管对基础
在面向对象的环境中,每个类型都代表可供程序使用的一种资源。要使用这些资源,必须为代表资源的类型分配内存。一下是访问一个资源所需要的步骤:
1. 调用IL指令newobj,为代表资源的类型分配内存(一般使用c# new 操作符来完成)。
2. 初始化内存,设置资源的初始状态并使资源可用。类型的实例构造器负责设置初始状态。
3. 访问类型的成员来使用资源(有必要可以重复)。
4. 摧毁资源的状态以进行清理。
5. 释放内存。垃圾回收器独自负责这一步。
从托管堆分配资源
C#的new操作符导致CLR执行的步骤:
1. 计算类型的字段(以及从基类型继承的字段)所需的字节数。
2. 加上对象的开销所需的字节数。每个对象都有两个开销字段: 类型对象指针和同步块索引。对于32位应用程序,这两个字段各自需要32位,所以每个对象要增加8字节。对于64位应用程序,这两个字段各自需要64位,所以每个对象需要增加16字节。
3. CLR检查区域中是否有分配对象所需的字节数。如果托管堆有足够的可用空间,就在NextObjPtr指针指向的地址处放入对象,为对象分配的字节会被清零。接着调用类型的构造器(为 this 参数传递NextObjPtr), new 操作符返回对象引用。就在返回这个引用之前,NextObjPtr 指针的值会加上对象占用的字节数来得到一个新