https://www.nowcoder.com/test/question/done?tid=19976256&qid=112524#summary
若有下面的说明和定义:
1 2 3 4 5 6 |
|
则sizeof(struct test )的值是( )。
对齐方式由 编译器的対界方式 和 自身的対界方式 取较小的那一个
编译器的対界方式默认为8,可以以宏的方式进行设置
#pragma pack(x) x为对齐的字节大小
本题中没有设置编译器,固为默认的8,这里看自身的対界方式。
struct(还有union,class)的対界方式为最大的数据成员的大小。
在struct里面为4(int),在union里面也为4(int),
综合判断4 < 8,固对齐方式为4个字节
接下来看sizeof(struct test)的大小,除union部分外
sizeof(int)+size(char)+sizeof(float) = 4 + 1 + 4 = 9
对union来说大小为成员定义里面最大的那个
5*sizeof(char) = 5 < 2*sizrof(int) = 8;
固union的sizeof(union uu)为 8 ,
因此总的大小为 9 + 8 = 17,考虑到对齐的方式为4字节,
因此向开界20对齐。答案为 A