Что такое mdToken и чем он отличается от MethodTable? - PullRequest
2 голосов
/ 23 августа 2011

Как в заголовке, что это такое и чем оно отличается от MethodTable?

1 Ответ

3 голосов
/ 23 августа 2011

mdToken - это токен метаданных, или более или менее идентификатор строки в таблице метаданных (часть int определяет таблицу, к которой он принадлежит, а другая часть идентифицирует строку в этой таблице).

Существует 2 типа токенов - внутренний и внешний.

Внутренние токены меньше внешних и используют только 4 байта: 3 байта для идентификатора строки и 1 байт для идентификатора таблицы.(Я не уверен, изменились ли эти размеры для x64, но вы поняли идею) Пример: 0x06000000 для первой строки (на основе нуля) в таблице методов.

Внешние токены (или закодированные токены) больше и предназначены для диапазона таблиц, а не для конкретной таблицы.Существует несколько различных типов кодированных токенов, и у них есть известные схемы, которые необходимо знать, чтобы понять их кодированные значения.Например, токен HasCustomAttribute может быть токеном для любой из 19 таблиц метаданных (поскольку атрибуты могут быть присоединены к очень многим различным частям вашего кода).Часть закодированного токена является идентификатором таблицы, также называемой тегом (но ширина битов, используемая для сохранения этой части, отличается у каждой - отсюда и известные схемы), оставшаяся часть остается для идентификатора строки.Размеры внешних токенов могут различаться - это помогает уменьшить размер при меньшем количестве строк.

...