在堆上分配的对象

Jus*_*uel 11 .net heap

无论何时创建任何新对象,都会在堆上创建对象.为每个对象分配的内存有两个附加字段1)类型对象指针2)同步块索引.

这两个字段的用法究竟是什么?任何人都可以对此有所了解吗?

Jon*_*eet 17

类型对象指针用于表示对象的类型.这是必需的:

  • 方法查找(vtable)
  • 检查演员
  • Type如果你打电话找到对象GetType.

syncblock字段主要用于锁定.只有当它需要时它才会被填充,并且当锁定总是无法检测时,CLR会使用"瘦"锁而不需要任何外部数据.否则,它是进程范围表中的一个条目 - 我不知道表中的内容的详细信息,但我想它就像在对象的监视器上等待的线程列表.当然,最重要的信息是当前是否保持锁,由哪个线程,以及它的计数是什么(由于.NET锁的重入性).

如果你调用GetHashCode()它并且它没有被覆盖,同步块也会被填充- 它基本上使用进程范围的表来分配一个稳定的数字.(对象的地址不够好,因为它可能会随着时间的推移而改变.)


Ily*_*rov 5

类型对象是 obj.GetType 调用返回的对象

用于同步的同步块

看: