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