为什么 :
short a=0;
Console.Write(Marshal.SizeOf(a));
Run Code Online (Sandbox Code Playgroud)
节目 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
Run Code Online (Sandbox Code Playgroud)
第1行的LDC表明:
将0作为int32推入堆栈.
所以必须4占用字节数.
但sizeOf显示2字节...
我在这里错过了什么?短片实际上占用了多少字节?
我听说有一个填充到4个字节的情况,所以处理起来会更快.是这样的吗?
(请忽略syncRoot和GC根标志字节,我只是询问2对4)