【问题标题】:.NET CIL Code Size.NET CIL 代码大小
【发布时间】:2010-12-11 02:20:33
【问题描述】:

查看编译后的 CIL 时,我注意到代码大小包含在编译后的 CIL 中。它被注释掉了。下面是一个例子

C#:

static void MakeACar()
{
Car myCar = new Car();
}

CIL:

.method public hidebysig static void MakeAObject() cil managed
{
    //Code size 7 (0x7)
    .maxstack 1
    .locals init ([0] class SimpleGC.Car c)
    IL_0000: newobj instance void SimpleGC.Car::.ctor()
    IL_0005: stloc.O
    IL_0006: ret
}

代码大小代表什么?

【问题讨论】:

    标签: .net cil code-size


    【解决方案1】:

    这只是 CIL 在其字节码形式中占用的字节数。

    (看看你的例子:你可以看到最后一条指令(ret)从字节偏移量 6(IL_0006:)开始。由于ret is encoded as a one-byte opcode,字节码流最终的总长度为 6 + 1 = 7 个字节。)

    【讨论】:

    • 什么意思?这是生成代码的实际大小,还是将放在托管堆上的新创建的 Car 类的大小?
    • 生成(组装)CIL 代码的实际大小。例如,一条 ret 指令的字节码表示为2A。 stloc.0也占1个字节,newobj指令是1个字节后跟4个字节的methoddef。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多