为什么sizeof(Point)是8?

zzf*_*ima 3 .net c# sizeof

我编写代码并得到奇怪的结果 - 整数我是8:

unsafe
        {
            int i = sizeof(Point);
        }
Run Code Online (Sandbox Code Playgroud)

检查struct Point后,我找到了这个字段:

    public bool IsEmpty { get; }
    public int X { get; set; }
    public int Y { get; set; }
Run Code Online (Sandbox Code Playgroud)

位数学:32 + 32 + 1 = 65位,因此> 8字节

那么,为什么sizeof返回8,而不是9?

谢谢

Joe*_*oey 10

IsEmpty是一个属性,而不是一个领域.属性只是幕后的方法,因此它们不是结构大小的一部分.

  • @zzfima No ...尝试`struct Test {bool Value; 1个字节.你看到的是额外的填充是由于'SomeVal`必须在4字节边界上对齐(因为它包含一个`Int32`),所以它的大小必须是4的倍数. (2认同)
  • 请注意,填充要求因平台而异,并且CLR与C和C++的成员顺序没有相同的规则,有时会忽略大部分必要的填充. (2认同)

Jim*_*Loe 5

框架实施Point用途只有两个属性:

private int x;
private int y; 
Run Code Online (Sandbox Code Playgroud)

Empty 实现为

[Browsable(false)]
public bool IsEmpty { 
    get {
        return x == 0 && y == 0;
    }
} 
Run Code Online (Sandbox Code Playgroud)

这两个int字段占用8个字节 - 一切都很好.