Int16 - объем байт в .net?

Почему :

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

шоу2

Но если я вижу код IL, я вижу:

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

НРС в строке № 1 указывает:

Вставьте 0 в стек какint32.

Так должно быть4 байты заняты.

НоsizeOf шоу2 байт ...

Что мне здесь не хватает? сколько байт на самом деле занимает короткое в памяти?

Мы слышали о ситуациях, когда есть заполнение до 4 байтов, чтобы с ним было быстрее иметь дело. это так и здесь?

(пожалуйста, игнорируйте syncRoot и байт корневого флага GC i 'м просто спрашиваю про 2 против 4)

Ответы на вопрос(4)

Ваш ответ на вопрос