我试图找出一些 CIL 代码。但这两个语句似乎做同样的事情(根据我所阅读的所有内容)。ldc.i4 33
和ldc.i4.33
两者都应该“将 int32 加载到值 33 的堆栈上”。
这样对吗?为什么?我原以为 ldc.i4.33
会“将一个整数从局部变量索引 33 加载到堆栈上”。
我哪里出错了?
最佳答案
操作码 ldc.i4.33
不存在。
有一些特殊的(称为宏)操作码,来自:
ldc.i4.m1 // has the same effect as: ldc.i4 -1
至
ldc.i4.8 // has the same effect as: ldc.i4 8
但它们只是
ldc.i4
操作码的一种简短形式,在常见情况下,用于优化 CIL 大小。类似地,
ldloc.0
是一种简短的形式(即具有更紧凑的 CIL 编码,但与 ldloc 0
的作用完全相同)等。关于.net - CIL - ldc.i4 33 和 ldc.i4.33 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5840252/