typedef struct s1{ char a; short b; char c; int c; }s1; sizeof(s1) //??? 结构体s1为什么是12字节
1个回答
展开全部
因为字节对齐,类或结构体中字节对齐的三个准则:
1) 结构体的首地址能够被其最宽基本类型成员的大小所整除;
2) 结构体每个成员相对于结构体首地址的偏移量是该成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
typedef struct s1 {
char a; // 地址范围为[0],占1字节
short b; // 地址范围为[2:3],占2字节,首地址2须为2的整数倍,前面填充了1个字节
char c; // 地址范围为[4],占1字节
int c; // 地址范围为[8:11],占4字节,首地址8须为4的整数倍,前面填充了3个字节
}s1;
地址范围为[0:11],中间填充了4个字节,因此sizeof(s1)=1+1+2+1+3+4=12
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询