c sizeof 整数对齐?

c sizeof integer alignment?

您好,我知道 C 标准在执行 sizeof 时需要内存对齐。但是不太明白为什么连整型数组也需要对齐。请参阅我的以下示例:

#include <stdio.h>

struct flexarray {
    int a[2];
    double f;
};

int main(int argc, char** argv)
{
    printf("sizeof (struct flexarray) = %zu\n", sizeof (struct flexarray));
    return 0;
}

输出为 16,因为 sizeof(int) = 4 且 sizeof(double) = 8。没关系。

但是当我将 a 更改为 int[3] 时,输出为 24 这不是我所期望的,因为根据我的计算结果应该是 20 (= 3 x 4 + 8)。

我能想到的唯一解释是编译器添加了一个填充整数,但我不明白为什么会这样:sizeof(int[3]) 是 12,毕竟它是 4 字节的倍数。

我正在使用 gcc 在 32 位 Linux 上编译。

Linux 93c9e1096795 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

有人能告诉我为什么吗?

如果你使用offsetof检查class成员的位置,你可能会发现编译器希望double值在8字节上对齐边界。