结构体中字节对齐的问题

来源:互联网 发布:淘宝鞋子关键词 编辑:程序博客网 时间:2024/04/28 20:38
在一个16位的机器,以下结构由于边界对齐浪费了多少空间()
1
2
3
4
5
struct{
     chara;
     intb;
     charc;
}

 2   4    6   8

16位机器,char型占1个字节,int型占2个字节。
结构体中字节对齐有两条规则:
  1. 数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题int型b只能从0,2,4...等地址处开始放;
  2. 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员(int b)长度的整数倍;
根据上面两条规则,画出内存示意图。根据规则1,int b从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,
结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。
参考https://www.nowcoder.com/test/question/done?tid=11188945&qid=25892#summary