namespace ConsoleApplication1 

    class Program 
    { 
        struct CurrencyStruct 
        { 
            public long Dollars; 
            public int Cents; 
            public char a; 
        } 
        static unsafe void Main() 
        { 
            Console.WriteLine("size is" + sizeof(CurrencyStruct)); 
            Console.ReadKey(); 
        } 
    } 

这个编译的结果实际是16啊但是这个是
namespace ConsoleApplication1 

    class Program 
    { 
        struct CurrencyStruct 
        { 
           public int Cents; 
            public long Dollars;             
            public char a; 
        } 
        static unsafe void Main() 
        { 
            Console.WriteLine("size is" + sizeof(CurrencyStruct)); 
            Console.ReadKey(); 
        } 
    } 
} 这个是24,两者有什么区别啊?

解决方案 »

  1.   

        using System;    class Program 
        { 
            struct S1 
            { 
                public long Dollars;   // 8
                public int  Cents;     // 4
                public char a;         // 2 (+2)
            }         struct S2 
            { 
                public int  Cents;     // 4 (+4)
                public long Dollars;   // 8
                public char a;         // 2 (+6)
            }         static unsafe void Main() 
            { 
                Console.WriteLine(sizeof(S1));  // 16
                Console.WriteLine(sizeof(S2));  // 24
            } 
        } 
      

  2.   

    不知道
    struct CurrencyStruct = 2
    {
    }struct CurrencyStruct = 2
    {
      public char a; = 2
    }struct CurrencyStruct = 8
    {
      public int Cents; = 4
      public char a; = 4
    }struct CurrencyStruct = 16
    {
      public long Cents; = 8
      public int a; = 8
    }struct CurrencyStruct = 16
    {
      public long Cents; = 8
      public char a; = 8
    }
    LZ的就不清楚了,期待楼主早日研究出成果,福泽苍生!
      

  3.   

    结构中每一个元素都要放在自身大小的倍数的地址边界上。        struct S1 
            { 
                public long Dollars;   // 8
                public int  Cents;     // 4,它要放在4的整倍数上,没问题。
                public char a;         // 2 (+2),最后要补齐到8(结构中最大元素的大小)的整倍数。
            } 
            struct S2 
            { 
                public int  Cents;     // 4 (+4)
                public long Dollars;   // 8,它要放在8的整倍数上,所以前面要补4。
                public char a;         // 2 (+6)),最后要补齐到8(结构中最大元素的大小)的整倍数。
            }