这以下C#
代码:IL代码加载的Int16如的Int32
short first = 1;
short second = 2;
bool eq1 = (first.Equals(second));
的代码转换为:
IL_0001: ldc.i4.1
IL_0002: stloc.0 // first
IL_0003: ldc.i4.2
IL_0004: stloc.1 // second
IL_0005: ldloca.s 00 // first
IL_0007: ldloc.1 // second
IL_0008: call System.Int16.Equals
IL_000D: stloc.2 // eq1
ldloca.s 00
- 局部变量的装入地址与索引INDX,短形式。
ldloc.1
- 将本地变量1加载到堆栈上。
为什么不是这两个命令是ldloca.s
(两个变量都是short
类型)?
请注意这不是完全相同的问题,因为http://stackoverflow.com/questions/17511737/int16-bytes-capacity-in-net,而是一个具体的案例问题。 – Ofiris 2014-09-30 09:06:33
顺便说一句,'.s'与'short'类型无关,如果这就是你的困惑。 (这只是表示变量号码<256)。 – svick 2014-09-30 09:30:57
@svick,谢谢,它使它更清晰,我认为它加载了一个'Int16'的值。 – Ofiris 2014-09-30 11:15:06