C / C ++:在结构中打包或填充数据

时间:2012-04-01 20:05:07

标签: c++ c padding

我正在使用Code :: Blocks IDE和GNU GCC编译器。

struct test
{
    char a;
    char e;
    char f;
    char b;
    char d;
};

sizeof(test)返回5

我读到了这个答案: Why isn't sizeof for a struct equal to the sum of sizeof of each member?

为什么在char之后没有填充,以便sizeof(test)返回68?一旦我添加shortint等,我可以提出更多问题。但我认为这个问题现在很好。填充不会使处理器更容易使用结构吗?

2 个答案:

答案 0 :(得分:10)

char的对齐方式只有1,因此不需要填充结构以满足更大的对齐要求。

答案 1 :(得分:1)

由于您大多数时候都在使用一个成员,或者传递结构的地址,因此编译器并不关心整个结构的对齐而不是其成员所需的对齐。这意味着如果您分配此结构(或将其传递给函数),处理器将必须逐个成员读取它。 (而且会慢一点。)