Указатель объекта типа используется для представления типа объекта. Это требуется для:
- Метод поиска (vtable)
- Проверка приведений
- Поиск объекта
Type
при вызове GetType
.
Поле syncblock в основном используется для блокировки. Он заполняется только тогда, когда это необходимо, и когда блокировка всегда не оспаривается, CLR обходится «тонкой» блокировкой, которая не требует никаких внешних данных. В противном случае это запись в таблице всего процесса - я не знаю деталей того, что находится в таблице, но я бы предположил, что это такие вещи, как список потоков, ожидающих на мониторе объекта. Конечно, самая важная часть информации - это то, удерживается ли в данный момент блокировка, каким потоком и каково ее количество (из-за повторяющейся природы блокировок .NET).
Синхронный блок также заполняется, если вы вызываете GetHashCode()
, и он не переопределяется - он использует таблицу всего процесса для выделения стабильного числа, в основном. (Адрес объекта недостаточно хорош, так как со временем может измениться.)