Что-то я забросил публикацию аннонсов своего англоязычного блога, что не хорошо. Исправляюсь.
Так вот, меня всегда интересовали несколько моментов с точки зрения структуры (layout) объекта: почему управляемый указатель указывает в середину объекта? Почему object header хранится по негативному индексу и что же именно может храниться в заголовке объекта?
На первый вопрос ответ дается в первом посте: Managed Object Internals, Part 1. Спойлеры: причина историческая, хотя есть и определенные сведения о том, что причины были связаны с эффективностью.
Во втором посте – Managed Object Internals, Part 2. Object header layout and the cost of locking в деталях рассматривается структура object header-а, а также концепция thin lock-ов. Интересно, что thin lock-и мало где описаны и о них мало кто знает. Thin lock – это более оптимальная реализация блокировок, добавленная в CLR 2.0, которая позволяет синхронизироваться на объекте с нулевыми (практически) накладными расходами за счет сохранения информации о блокировки внутри object header-а.