c语言结构体对齐

   # include  & lt; stdio.h>//gcc  ubuntu  32位机   # pragma 包(8)   typedef  struct  m   {   ,,,char  a ;   ,,,long  b ;   },M;      typedef  struct  n   {   ,,,char  a ;   ,,,char  b ;   ,,,long  c ;   },N;      typedef  struct  x   {   ,,,char ,,,,, a ;   ,,,struct  m , b ;   ,,,long  long  c ;   },X;      typedef  struct  y   {   ,,,char ,,,,, a ;   ,,,struct  n , b ;   ,,,long  long  c ;   },Y;   # pragma 包()   # define , ADDR (ADDR),, ((unsigned  int) (ADDR))      void 主要(空白)   {   ,,,printf (" sizeof (char): % d , sizeof(短):% d , sizeof (int): % d  sizeof(长):% d  sizeof (long 长):% d \ n”, \   ,,,,,,,,,,,sizeof (char), sizeof(短),sizeof (int), sizeof(长),sizeof (long 长));      ,,,printf (" sizeof (M): % d , sizeof (N): % d  sizeof (X): % d , sizeof (Y): % d \ N”, sizeof (M), sizeof (N), sizeof (X) sizeof (Y)),;   ,,,,   ,,,M  M ;   ,,,N  N ;   ,,,X  X ;   ,,,Y  Y ;   ,,,,   ,,,printf("硕士:% d  m.b: % d  \ n”, ADDR(及硕士)ADDR,米,ADDR(及m.b) ADDR(及m));   ,,,printf("厦门市:% d 注意:% d ,北卡罗来纳州:% d  \ n”, ADDR(及厦门市)ADDR(及n), ADDR(和被害者)ADDR(及n), ADDR(和北卡罗来纳州)ADDR(及n)),,,,   ,,,printf (" x.a: % d  x.b.a: % d , x.b.b: % d  x.c: % d \ n”, ADDR(及x.a) ADDR (, x) ADDR(及x.b.a) ADDR (, x) ADDR(及x.b.b) ADDR (, x) ADDR(及x.c) ADDR (, x));   ,,,printf (" y.a: % d  y.b.a: % d , y.b.b: % d  y.b.c: % d  y.c: % d \ n”, ADDR(及y.a) ADDR(和y) ADDR(及y.b.a) ADDR(和y) ADDR(及y.b.b) ADDR(和y) ADDR(及y.b.c) ADDR(和y) ADDR(及y.c) ADDR (y),),,,,,   ,,,,   ,,,,   ,,,return ;   }/*   程序运行结果:   sizeof (char): 1,, sizeof(短):2,,sizeof (int): 4, sizeof(长):4,   sizeof (long 长):8      sizeof (M): 8,, sizeof (N): 8, sizeof (X): 20, sizeof (Y): 20      硕士:0,m.b: 4,      厦门市:0,注意:1,,北卡罗来纳州:4,      x.a: 0, x.b.a: 4,, x.b.b: 8, x.c: 12//这里的x.c没有对其到可被8整除的地址上   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,//系统是按4字节对其的吗? 32位的系统8字节对齐没有意义?   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,//32位的系统,8字节的数据采用8字节的对齐方式,内存的读取   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,//也要读取多次,对其到8字节浪费空间,且不能加快读取速度   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,//因为32为的系统,数据总线是32位,一次最多也就只能取4个   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,//字节的数据,8字节的数据,对齐到4字节和对齐到8字节是一样的   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,//内存的硬件电路决定了,最大也就4个字节对齐,大于4字节的对齐是没有意义的      y.a: 0, y.b.a: 4,, y.b.b: 5, y.b.c: 8, y.c: 12//这里的y.c没有对其到可被8整除的地址上      *//*   把# pragma 包(8),,改为,# pragma 包(1)   程序运行结果:   sizeof (char): 1,, sizeof(短):2,,sizeof (int): 4, sizeof(长):4,   sizeof (long 长):8      sizeof (M): 5,, sizeof (N): 6, sizeof (X): 14, sizeof (Y): 15      硕士:0,m.b: 1,   厦门市:0,注意:1,,北卡罗来纳州:2,   x.a: 0, x.b.a: 1,, x.b.b: 2, x.c: 6   y.a: 0, y.b.a: 1,, y.b.b: 2, y.b.c: 3, y.c: 7      *//*   把# pragma 包(8),,改为,# pragma 包(4)   程序运行结果:   sizeof (char): 1,, sizeof(短):2,,sizeof (int): 4, sizeof(长):4,   sizeof (long 长):8   sizeof (M): 8,, sizeof (N): 8, sizeof (X): 20, sizeof (Y): 20   硕士:0,m.b: 4,   厦门市:0,注意:1,,北卡罗来纳州:4,   x.a: 0, x.b.a: 4,, x.b.b: 8 x.c: 12   y.a: 0, y.b.a: 4,, y.b.b: 5, y.b.c: 8 y.c: 12   null

c语言结构体对齐