public class  MyClass
    {
        byte b1;
        byte b2;
        byte b3;
        byte b4;
        Point p1;
        Point p2;
        Point p3;
        Point p4;
    }
    public struct Point
    {
        byte x;
        byte y;
        byte z;
    }

解决方案 »

  1.   

    我的计算方式是:假设是32位
    struct默认是按声明顺序布局字段的,那么point就是(1+3)*3=12byte,
    class默认有CLR自动优化布局的,假设它会把前四个byte类型的变量和在一起,就是4byte+4*12=52byte,在加上额外的8byte,就是60.问题是point这个结构是多大,,,12还是4?
      

  2.   

    取决于对齐方式。
    数据本身最少16字节。如果是类(class),每个实例还有另外8个字节(引用块和同步块)的额外开销。
      

  3.   

    那单单那个point是多少呢?12还是4?
      

  4.   

    point默认是按声明顺序布局,3个字段都是byte类型,都不够4byte大小。我迷惑的是CLR怎么对齐这三个字段,是没一个单独加3个byte对齐还是先把这3个字段和一块再加一个byte对齐呢?
      

  5.   

    lz搜索一下StructLayout、FieldOffset吧,讲的比较清楚。