Расположение памяти класса CLR - PullRequest
11 голосов
/ 21 января 2012

Что такое макет памяти класса CLR?

Исходя из фона C ++, макет памяти класса C ++ с виртуальными функциями начинается с указателя v-таблицы, а затем членов данныхкласс следует в памяти.

Есть ли у классов CLR с виртуальными функциями указатель v-таблицы?Является ли этот указатель первым полем в макете памяти класса?Есть ли дополнительные поля в макете памяти класса CLR в дополнение к определенным программистам членам данных?И что представляют собой эти дополнительные поля?

Ответы [ 2 ]

10 голосов
/ 21 января 2012

Это зависит от реализации, но эта статья дает описание того, что присутствовало в реализации Microsoft .NET для CLR v2.Я подозреваю то же самое для CLR v4, но я не мог этого гарантировать.Найдите подробности в разделе «ObjectInstance», но вы можете найти всю статью интересной.

Согласно статье, в основном есть два бита заголовка: блок синхронизации ,используется для блокировки, и ссылка на тип , которая в основном является указателем на информацию о типе (включая vtable).

1 голос
/ 24 июля 2016

Оригинальная статья "Jit and Run" все еще существует, как файл chm .Просто следуйте инструкциям MSDN , чтобы прочитать:

В большинстве версий Windows сначала необходимо сохранить эти файлы на локальном компьютере, а затем разблокировать файл, чтобыпрочитай это.Чтобы разблокировать файл, щелкните его правой кнопкой мыши и выберите «Свойства», а затем нажмите кнопку «Разблокировать».Затем контент будет доступен для чтения

Однако почтенный Джон Скит угадал - и структура памяти объекта действительно изменилась.Саша Гольдштейн дает актуальный (CLR v4) обзор макета, здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...