ldc.i4.x和ldc.i4 x指令是否可互换且语义相同?

时间:2012-10-15 11:48:19

标签: c# .net cil il

CIL中有一些加载说明,例如ldc.i4.0ldc.i4.1ldc.i4.2ldc.i4.3 ......

我想知道,是否可以使用ldc.i4 1代替ldc.i4.1ldc.i4 5代替ldc.i4.5

2 个答案:

答案 0 :(得分:7)

是的,使用ldc.i4 1代替ldc.i4.1是完全合法的。在最常见的情况下,单字节操作码的是为了提高效率和简洁性。特别是,所有ldarg.0(1个字节)将快速加起来显着增加程序集的大小,如果它们是ldarg 0(3个字节),那么{ {1}}之类的内容{1}} ldc.i4.1是5个字节而不是1个。

您没有义务使用它们。我实际上期望(未经测试)JIT以发现更详细的用法并且无论如何都要对它进行相同处理,尽管它不会 这样做。

就个人而言,当我正在“发射”或类似时,我只使用一个实用程序方法,为任何给定的值/ local / argument /等发出最合适的代码。 / p>

答案 1 :(得分:-2)