#include <stdio.h>
int main()
{
struct stu
{
int a; //4个字节
char b; //1个字节
short c;//2个字节
char d;//1个字节
}A;
int s = sizeof(A);
printf("%d\n",s); //输出结果为12
return 0;
}
结构体是有有效对齐值的,就是数据类型的本身长度char: 1 short: 2int: 4,假设有效对齐值为N,也就是说该数据的”存放起始地址%N=0″这个老师没讲,应该不重要。
假设stu从地址空间0×0000开始排放。第一个成员变量a有效对齐值为4,所以其存放地址从0×0000到0×0003这四个连续的字节空间中符合0×0000%4=0.第二个成员变量b,其有效对齐值为1,所以存放地址为0×0004,复核0×0004%1=0,且紧靠第一个变量。第三个变量c,有效对齐值是2,可以存放在0×0008到0×0009这两个字节空间中,符合0×0008%2=0。第四个变量c,有效对齐值是1,可以存放在0×000A中,符合0×000A%1=0。所以从0×0000到0×000A存放的都是stu内容。从0×000A到0×0000=11字节,根据根据对齐算法,应该取最大字节4的整数倍为12。结构体stu所占从0×0000到0x000B共有12个字节,sizeof(A)=12;
|