CIL中有ldc.i4.0
、ldc.i4.1
、ldc.i4.2
等加载指令, ldc.i4.3
...
我想知道,是否可以使用 ldc.i4 1
而不是 ldc.i4.1
或 ldc.i4 5
而不是ldc.i4.5
?
最佳答案
是的,使用 ldc.i4 1
代替 ldc.i4.1
是完全合法的。在最常见的情况下,为了效率和简洁给出了单字节操作码。特别是,所有这些 ldarg.0
(1 字节)如果它们是 ldarg 0
,将很快显着增加程序集的大小(3 个字节),就像 i++
中的 ldc.i4.1
一样; ldc.i4 1
是 5 个字节而不是 1 个。
您没有义务使用它们。实际上,我期望(未经测试)JIT 发现更冗长的用法并以同样的方式对待它,尽管不需要这样做。
就我个人而言,当我进行“发射”或类似操作时,我只是使用实用方法为任何给定值/局部/参数等发射最合适代码。
关于c# - ldc.i4.x 和 ldc.i4 x 指令是否可以互换并且在语义上相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895020/