Int16 - Bytes Kapazität in.net?

Warum tut :

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

zeigt an2

Aber wenn ich den IL-Code sehe, sehe ich:

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

Der LDC in Zeile 1 gibt Folgendes an:

0 auf den Stapel schieben alsint32.

Also muss es gegeben haben4 Bytes belegt.

AbersizeOf zeigt an2 Bytes ...

Was vermisse ich hier? Wie viele Bytes nimmt Short tatsächlich in Mem auf?

Ich habe von Situationen gehört, in denen eine Auffüllung auf 4 Bytes erfolgt, damit es schneller geht. ist es auch hier so?

(Bitte ignoriere das syncRoot und das GC Root Flag Byte, ich frage nur nach 2 vs 4)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage