如标题所示,它是什么以及它与 MethodTable 有何不同?
问问题
933 次
1 回答
3
mdToken 是元数据标记,或多或少是元数据表中的行 id(int 的一部分标识它所属的表,另一部分标识该表中的行)。
有两种类型的令牌 - 内部和外部。
内部令牌比外部令牌小,仅使用 4 个字节:3 个字节用于行 ID,1 个字节用于表 ID。(我不确定 x64 的这些大小是否发生了变化,但你明白了) 示例:方法表中的第一行(从零开始)为 0x06000000。
外部标记(或编码标记)更大,用于一系列表,而不是特定表。有几种不同的编码标记类型,它们具有已知的模式,您必须知道这些模式才能理解它们的编码值。例如,HasCustomAttribute 标记可以是 19 个元数据表中任何一个的标记(因为属性可以附加到代码的许多不同部分)。编码标记的一部分是表的 id,也称为标记(但用于保持这部分的位宽因每个而异 - 因此是已知的模式),其余部分留给行 id。外部令牌的大小可以变化 - 这有助于在行数较小时保持较小的大小。
于 2011-08-23T11:55:05.113 回答