這以下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