c# - ldc.i4.x 和 ldc.i4 x 指令是否可以互换并且在语义上相同?

标签 c# .net cil il

CIL中有ldc.i4.0ldc.i4.1ldc.i4.2等加载指令, ldc.i4.3 ...

我想知道,是否可以使用 ldc.i4 1 而不是 ldc.i4.1ldc.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/

相关文章:

c# - 参数化实例化如何与单实例生命范围一起工作

c# - Canvas 属性和边距的区别

c# - 如何从其访问器中获取属性的唯一标识符

c# - 如何防止一个应用程序的两个实例同时做同样的事情?

C#结合MSIL——JIT跳过验证

.net - 如何检测哪种 .NET 语言正在调用我的代码

c# - 如何在.Net WPF MVVM应用程序的ViewModel之间传递事件?

c# - 使用 WCF 和同步框架通过 HTTP 同步 SQL Server 2008 数据库

.net - 如何将 C# 应用程序分发到具有未知版本的 .Net 的计算机?

c# - 为 WPF 开发人员推荐的 Web 技术?