3

CIL 中有一些加载指令,例如ldc.i4.0, ldc.i4.1, ldc.i4.2, ldc.i4.3 ...</p>

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

4

2 回答 2

7

是的,使用ldc.i4 1. 代替是完全合法的ldc.i4.1。在最常见的场景中,为了效率和简洁性,给出了单字节操作码。特别是,如果它们是(3 个字节) ,所有这些ldarg.0(1 个字节)将很快加起来显着增加程序集的大小,就像in 之类的东西一样;是 5 个字节而不是 1 个。ldarg 0ldc.i4.1i++ldc.i4 1

您没有义务使用它们。我实际上希望(未经测试)JIT 能够发现更冗长的用法并以同样的方式对待它,尽管它不需要这样做。

就个人而言,当我在做“发射”或类似的事情时,我只是使用一种实用方法来为任何给定的值/本地/参数/等发出最合适的代码。

于 2012-10-15T11:57:25.517 回答
-2

这是关于 CLR 代码注入的好文章:http: //www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time

于 2012-10-15T11:50:43.177 回答