我有各种元素的结构,
struct
{
unsigned char aa;
unsigned char bb[16];
unsigned int cc;
unsigned int dd;
struct
{
unsigned char bit_0 :1;
unsigned char bit_1 :1;
unsigned char bit_2 :1;
unsigned char dummy_bit :5;
} Bits;
} Top_array[50],Top;
我知道对于单个结构Top,元素之间会有填充。当存在一组结构Top_array时会发生什么。填充是否仍然存在于Top_array [0]和Top_array [1]之间?
即。 sizeof(Top_array)总是50倍sizeof(Top)?
答案 0 :(得分:4)
sizeof(Top_array)总是50倍sizeof(顶部)?
是。在结构的末尾可能有一个填充,所以当有一个数组时,结构的起始地址和它的每个成员仍然是对齐的。
答案 1 :(得分:3)
严格来说,结构数组元素之间没有填充;数组元素总是连续的 - 但是在结构的末尾可能有填充以确保数组对齐,这具有相同的效果。
也就是说,填充位于结构的末端并且是结构的一部分,而不是元素之间。如果是,则sizeof(Top_array[0]) * 50
将不等于sizeof(Top_array)
,它必须是。{/ p>
答案 2 :(得分:1)
是。填充类型,以便,如果将它们放入数组中,阵列中的每个项目都将正确对齐。
所以,例如,类型:
struct {
int myint;
char mychar;
};
将在末尾有足够的填充以满足int
的对齐要求(如果有的话)。