结构数组中的填充

时间:2014-04-21 05:56:09

标签: c embedded

我有各种元素的结构,

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)?

3 个答案:

答案 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的对齐要求(如果有的话)。