CIL有一些双字节指令,考虑到有很多未使用的可用单字节指令,我觉得这很奇怪。一些特定的示例是:
0x24
在0x23 ldc.r8
和0x25 dup
之间未使用0xA6
和0xB2
之间未使用0xA5 unbox.any
至0xB3 conv.ovf.i1
我只计算了27个双字节指令,而且空位比这个多。
我可以理解这是否是对齐问题,但是许多单字节指令后跟32位整数(总共5个字节),几个双字节指令后跟32位整数(总共6个字节),它们分别是一条双字节指令,后跟一个8位整数(共3个字节)。据我所知,它们与任何一致的边界都没有对齐。
作为参考,我正在使用System.Reflection.Emit.OpCodes静态字段https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.opcodes
上的文档请原谅我这是不是要问的错误堆栈,我为此而感到困惑。让我知道是否应该张贴在那里。