为什么CLR对象引用包含对象中间的地址?

时间:2017-06-25 11:09:12

标签: .net clr

CLRv4中的对象以这样的方式布局在内存中:

  • 同步块
  • 指向方法表的指针
  • 用户定义的字段

对象引用的实现方式对我来说很奇怪 - 引用实际上是一个指向包含指向表的指针的字段的指针。换句话说,它包含一个对象的移位地址(它不指向对象的开头,而是指向同步块之后)。资料来源:CLR Sync Block Address

为什么以这种方式实施?我相信它可能与性能有关 - 方法表可能比同步块更容易被访问,在这种情况下需要更少的操作。但是,如果是这种情况,则将同步块和指针重新排序到方法表更自然,因此后者位于对象的开头。这种布局的原因是什么?

0 个答案:

没有答案