计算CLR编码的索引大小

时间:2016-02-27 19:56:41

标签: clr

我试图阅读MemberRef编码索引(MemberRefParent),在我这样做之前,我需要知道它的大小,根据 ECMA-335第II.24.2.6节,如果我理解正确,编码索引的计算如下:

我的伪代码

m=max_rows(t0..tn-1); //returns the number of rows of the table that has the most rows.
if(m<2^(16-log(n)){
  //size is 2
} else {
  //size is 4
}

当我在CLI文件上测试代码时,我遇到了错误,我一定错过了什么,希望有人能帮我找到我错的地方。

来自第II.24.2.6节,ECMA-335

  

如果e是一个编码索引,指向n中的表ti   表t0,... tn-1,然后将其存储为e&lt;&lt; (log n)| tag {t0,... tn-1} [   ti]如果表t0,... tn-1的最大行数,则使用2个字节,   小于2 ^(16 - (log n)),否则使用4个字节。

-

  

MemberRefParent:3位用于编码标签Tag

     

TypeDef 0

     

TypeRef 1

     

ModuleRef 2

     

MethodDef 3

     

TypeSpec 4

0 个答案:

没有答案