IL代码中的这个符号(IL_0000
等)是什么。它是真正的内存堆地址吗?
IL_0000: nop
IL_0001: ldstr "here is something"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ldc.i4.s 18
IL_000e: newobj instance void Proj.Stock::.ctor(int32)
IL_0013: stloc.0
IL_0014: ldstr "another"
IL_0019: call void [mscorlib]System.Console::WriteLine(string)
IL_001e: nop
IL_001f: ldstr "and even more"
IL_0024: call void [mscorlib]System.Console::WriteLine(string)
IL_0029: nop
IL_002a: ret
答案 0 :(得分:3)
IL_0000:
是代码标签。它实际上只是一个标识符,因此您可以通过名称而不是按字节数轻松引用跳转位置。
请参阅公共语言基础结构(CLI)标准文档。 ECMA-335第II.5.4节
II.5.4标签的标签和标签
提供标签作为编程方便;他们代表了一个 在元数据中编码的数字。由a表示的值 label通常是从字节开头的字节偏移量 当前的方法,虽然精确的编码取决于 其中在逻辑元数据结构或CIL流中的标签 发生。
...