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)