如果定义如下一个结构体
3 struct data{
4 int a;
5 char b;
6 short c;
7 int d;
8 long long e;
9 char f;
10 char g;
11 int h;
12 int i;
13 };
考虑到字节对齐问题,在x86,32位环境下int型数据必定要存在能被4整除的起始内存位置上,int型总是占用机器所对应的可以操作的最大位,这样可以获得最高的执行效率
如执行printf打印出地址
28 printf("addr:/n%p/t%p/t%p/t%p/t%p/n%p/t%p/t%p/t%p/t%p/n",&test_data.a,&test_data.b,
29 &test_data.c,&test_data.d,
30 &test_data.e,&test_data.f,
31 &test_data.g,&test_data.h,
32 &test_data.i
33 );
如某结果如下:
0xbfaea184 0xbfaea188 0xbfaea18a 0xbfaea18c 0xbfaea190
0xbfaea198 0xbfaea199 0xbfaea19c 0xbfaea1a0 0xbfaea188
相当于内存如下图分布
起始:0xbfaea184,每个长块的大小为4B