我编写了代码,但结果很奇怪——整数i的值是8:
unsafe
{
int i = sizeof(Point);
}
检查结构体Point后,我发现以下字段:
public bool IsEmpty { get; }
public int X { get; set; }
public int Y { get; set; }
位数运算:32+32+1 = 65位,所以大于8字节。
那么,为什么sizeof返回的是8而不是9呢?
谢谢。
结构体 SomeVal { public Int32 x; public Int32 y; public bool z; }
它的大小是12!变量的最小块是4个字节吗? - zzfimastruct Test { bool Value; }
只有1个字节。你看到的是额外的填充,因为SomeVal
必须在4字节边界上对齐(因为它包含一个Int32
),所以它的大小必须是4的倍数。 - xanatosstruct
,C# 编译器会发出[StructLayout(LayoutKind.Sequential, Size = 1)]
(参见 http://goo.gl/V6qH4Y)(请注意,这是 C# 编译器执行的操作...不能保证其他 .NET 语言会执行相同的操作) - xanatos