【问题标题】:what does 'code size' in MSIL meanMSIL 中的“代码大小”是什么意思
【发布时间】:2011-06-30 11:55:24
【问题描述】:

当你在 IL 中看到这样的一行时:

// Code size       25 (0x19)

尼特实际上是什么意思?它是在谈论(字节)内存使用情况吗?我所能收集到的只是它比 IL 行的数量多一个。以下是完整的 IL。

.method private hidebysig static void  Execute(string y) cil managed
{
  // Code size       25 (0x19)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "string"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ldarg.0
  IL_000d:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0012:  call       void [mscorlib]System.Console::WriteLine(object)
  IL_0017:  nop
  IL_0018:  ret
} //

当我查看 ECMA_335 文档时,它将代码大小定义为:代码(文本)部分的大小,或者如果有多个部分,则为所有代码部分的总和。 (嗯?)

【问题讨论】:

    标签: .net cil


    【解决方案1】:

    并非所有 IL 操作码的大小都相同,不同操作码的参数编码也占用不同的空间量。 “代码大小”是所有操作码的大小加上其操作数的大小。

    例如,nop 操作码是一个单字节(如 OpCodes.Nop.Size 所见),并且不带任何操作数(如 OpCodes.Nop.OperandType 所见),因此第一行需要一个单字节(这就是为什么第二行标有IL_0001)。

    同样,ldstr 也是单字节,但字符串参数在 IL 中由字符串表偏移量表示,它占用 4 个字节(重要的是,字符串的 内容计算中的因素),因此您的第二条 IL 指令总共需要 5 个字节(第三行标记为 IL_0006)。

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多