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

C# ldc.i4.x和ldc.i4 x指令是否可互换且语义相同?,c#,.net,cil,il,C#,.net,Cil,Il,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 这是一篇关于CLR代码注入的好文章: 是的,使用ldc.i4.1代替ldc.i4.1是完全合法的。在最常见的情况下,为了提高效率和简洁性,给出了单字节操作码。特别是,如果这些ldarg.0(1字节)是ldarg.0(3字节),那么所有这些ldarg.0(1字节)将迅速增加程序集的大小,就像i++中的ldc

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

这是一篇关于CLR代码注入的好文章:

是的,使用
ldc.i4.1
代替
ldc.i4.1
是完全合法的。在最常见的情况下,为了提高效率和简洁性,给出了单字节操作码。特别是,如果这些
ldarg.0
(1字节)是
ldarg.0
(3字节),那么所有这些
ldarg.0
(1字节)将迅速增加程序集的大小,就像
i++
中的
ldc.i4.1
一样
ldc.i4 1
是5字节而不是1字节

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


就个人而言,当我执行“emit”或类似操作时,我只使用一个实用方法,为任何给定值/本地/参数/等发出最合适的代码。

是否可以使用ldc.i4 1而不是ldc.i4.1或ldc.i4 5而不是ldc.i4.5?对。问题是关于具体的指示。如果可能的话,或者如何注射白细胞介素,一般情况下不会太多。当然。。但是为什么呢?它们占用更多的空间,而且似乎没有任何好处。这是关于代码注入的问题吗?在这种情况下,答案大概是否定的,不容易,因为它们占用了更多的空间?也许有必要澄清这里的上下文,以及“替换”的含义。@James确实,这里的问题还不清楚;我选择将其解释为“这两件事是可互换的和语义相同的吗?”