Int16 - bytes de capacidad en.net?

Por que :

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

muestra2

Pero si veo el código IL veo:

/*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

El LDC en la línea # 1 indica:

Empuje 0 en la pila comoint32.

Así que debe haber4 bytes ocupados

PerosizeOf muestra2 bytes ...

Que me estoy perdiendo aqui ? ¿Cuántos byte corto realmente toma en mem?

He escuchado sobre situaciones en las que hay un relleno de 4 bytes, por lo que sería más rápido tratar con ellos. ¿Es el caso también aquí?

(por favor ignore el syncRoot y el byte de la raíz del GC, solo pregunto sobre 2 contra 4)

Respuestas a la pregunta(4)

Su respuesta a la pregunta