C# 为什么sizeof(Point)是8?
我编写了代码,得到了奇怪的结果——整数i是8:C# 为什么sizeof(Point)是8?,c#,.net,sizeof,C#,.net,Sizeof,我编写了代码,得到了奇怪的结果——整数i是8: unsafe { int i = sizeof(Point); } 检查结构点后,我发现以下字段: public bool IsEmpty { get; } public int X { get; set; } public int Y { get; set; } 比特数:32+32+1=65比特,因此大于8字节 那么,为什么sizeof返回8,而不是9 谢谢IsE
unsafe
{
int i = sizeof(Point);
}
检查结构点后,我发现以下字段:
public bool IsEmpty { get; }
public int X { get; set; }
public int Y { get; set; }
比特数:32+32+1=65比特,因此大于8字节
那么,为什么sizeof返回8,而不是9
谢谢IsEmpty
是一个属性,而不是字段。属性只是幕后的方法,因此它们不是结构大小的一部分。点的属性只使用两个属性:
private int x;
private int y;
Empty
实现为
[Browsable(false)]
public bool IsEmpty {
get {
return x == 0 && y == 0;
}
}
两个
int
字段占用8个字节,一切正常。是的,您可以编写!我试过做:struct SomeVal{public Int32 x;public Int32 y;public bool z;},大小是12!变量的最小块是4字节?@zzfima No。。。尝试struct Test{bool Value;}
1字节。你看到的是额外的填充,因为代码< > SeaValue/Cuff>必须在4字节边界上对齐(因为它包含一个<代码>国际标准> 32代码/代码>),所以它的大小必须是4的倍数。注意填充需求随平台而变化,CLR对于C和C++的成员顺序没有相同的规则,有时候,我需要很多必要的填充物,除非有人用枪指着我,我永远不会考虑数据是如何被内部处理的。当然,也有头痛的情况,你无法避免。然而,在这种情况下,我有一件重要的事情叫我出国…@Joey,但请注意,对于struct
,C#编译器发出[StructLayout(LayoutKind.Sequential,Size=1)]
(请注意,是C#编译器做的……不能保证其他.NET语言也做同样的事情)