# 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