类型对象指针

又称为方法表指针(MT);
32 位系统占 4 字节,64 位系统占 8 字节;
实例化对象时,CLR 自动初始化类型对象指针这个成员,它指向类型对象。
用 System.Object.GetType() 方法返回这个成员值,用来知道对象(包括类型对象本身)的类型。

同步块索引

32 位系统占 4 字节,64 位系统占 8 字节;

同步块索引用途

  • 线程同步 lock;
  • GetHashCode,要用到同步块索引的后 26 位;
  • GC 时标记对象;

线程同步

当 CLR 初始化的时候,CLR 会初始化一个同步块数组,线程遇到 lock,去检查对象的同步块索引的值,如果值指向同步块数组的项,说明已加锁,等待;否则,就去同步索引数组中找个空闲位置,记录下标值到 lock 对象的同步块索引上。
负责为对象分配同步块并且赋值同步块索引的线程本身是线程安全的。