字符的结构填充

时间:2014-05-11 06:27:44

标签: c struct padding

    struct struct_name {
                        char a;
                        char b;
                        char c;
     }

结构struct_name的大小为3但

   struct struct_name1 {
   char a;
   char b;
   char c;
   int d;
   char e;
   char f;
   char g;
};

struct_name1的大小是12为什么? 我知道这是因为填充,但为什么结构stuct_name的大小是3,为什么sizeof结构struct_name1不是11。

1 个答案:

答案 0 :(得分:1)

这一切都取决于平台,但假设一个相对正常的环境,32位int s需要在32位边界上对齐,则需要该结构为4字节大小的倍数。否则,如果您尝试创建struct_name1数组,则中间的int将无法正确对齐(数组中的元素之间不能填充)。

如果编译器将该结构设置为11,则其中两个的数组将如下所示:

abcXddddefgabcXddddefg  // X is padding
0   4   8   C  F        // hex offset

您会看到第二个int d的第一个字节位于偏移量0x0F,该值为15,而不是4字节对齐。因此添加了额外的填充字符:

abcXddddefgXabcXddddefgX  // X is padding
0   4   8   C   0   4     // hex offset

并且中间int将始终具有正确的对齐方式。