为什么C# – > CIL在每条指令上都有标签?

在已编译的C#程序上使用ILDASM.exe时,它会显示方法中的每条指令都有一个标签.

例如:

IL_0001:  ldc.i4.4
IL_0002:  stloc.0
IL_0003:  ldc.r8     12.34
IL_000c:  stloc.1
IL_000d:  ldc.r8     3.1415926535897931
IL_0016:  stloc.2
IL_0017:  ldstr      "Ehsan"
IL_001c:  stloc.3
IL_001d:  ret

为什么是这样?这样做效率不高或者CIL编译器本身是否优化这些标签?

解决方法:

编译的CIL中不存在标签.它们是为了方便您在反汇编代码中显示的.

这些特定标签对应于指令偏移,而手工代码没有这样的限制(标签可以是任意字符串).

上一篇:c# – “ceq”MSIL命令和object.InternalEquals之间的区别


下一篇:c# – Visual Studio编译器如何将安全属性编译为CIL?