Int16 - pojemność bajtów in.net?

Dlaczego :

short a=0;
Console.Write(Marshal.SizeOf(a));

przedstawia2

Ale jeśli zobaczę kod IL, widzę:

/*1*/   IL_0000:  ldc.i4.0    
/*2*/   IL_0001:  stloc.0     
/*3*/   IL_0002:  ldloc.0     
/*4*/   IL_0003:  box         System.Int16
/*5*/   IL_0008:  call        System.Runtime.InteropServices.Marshal.SizeOf
/*6*/   IL_000D:  call        System.Console.Write

LDC w linii # 1 wskazuje:

Wciśnij 0 na stos jakoint32.

Tak musiało być4 zajęte bajty.

AlesizeOf przedstawia2 bajty ...

Czego mi tu brakuje? ile bajtów faktycznie zabiera mem?

Słyszałem o sytuacjach, w których istnieje dopełnienie do 4 bajtów, więc szybciej byłoby sobie poradzić. czy tak jest również tutaj?

(proszę zignorować syncRoot, a bajt flagi roota GC pytam tylko o 2 vs 4)

questionAnswers(4)

yourAnswerToTheQuestion