我有各种元素的结构,

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

===============>>#1 票数:4

sizeof(Top_array)总是50倍sizeof(Top)?

是。 在结构的末尾可能有一个填充,因此当有一个数组时,结构的起始地址和它的每个成员仍然是对齐的。

===============>>#2 票数:3

严格地说,结构数组的元素之间没有填充; 数组元素总是连续的 - 但是在结构的末尾可能有填充以确保数组对齐,这具有相同的效果。

也就是说,填充位于结构的末端并且是结构的一部分,而不是元素之间。 如果是否则sizeof(Top_array[0]) * 50将不等于sizeof(Top_array) ,它必须是。

===============>>#3 票数:1

是。 填充类型,以便,如果将它们放入数组中,阵列中的每个项目都将正确对齐。

所以,例如,类型:

struct {
    int myint;
    char mychar;
};

将在末尾有足够的填充以满足int的对齐要求(如果有的话)。

  ask by Rishikesh Raje translate from so

未解决问题?本站智能推荐: