为什么 gcc 不能将结构的对齐方式减少到小于其单个字段之一的对齐方式

Why can't gcc reduce the alignment of a struct to be lesser than that of one of its individual fields

我有一个实例化 monica 的结构定义 employee。结构看起来像这样

struct __attribute__((aligned(2))) employee {
    int salary; // 4 bytes
    int age; // 4 bytes
} monica;

如您所见,我已将结构的对齐方式强制设置为2,但gcc 并未将结构的对齐方式设置为2,也没有抛出错误。我尝试使用 alignof 宏(包括 <stdalign.h>)打印结构的对齐方式,其中 returns 4 作为结构的对齐方式。为什么 gcc 不能将结构的对齐方式设置为小于其字段之一的最大对齐方式的值。

我试图通过在结构中另外添加一个指针作为字段来重现该问题。在将指针添加为字段时,我注意到 gcc 不允许我使用 __attribute__((aligned(x))).

将对齐减少到 8 以下

GCC 允许我使用 __attribute__((packed)) 将结构的对齐设置为 1 但它仍然不允许我使用 [=21 将对齐设置为 1 =].为什么会这样?

gcc x86 v7.1.1

GCC documentation 说:

… When used on a struct, or struct member, the aligned attribute can only increase the alignment; in order to decrease it, the packed attribute must be specified as well…

来自 GCC 11.2 文档。您可以查看旧文档。该站点有 7.1 的 none;它从 6.5 跳到 7.5,但我希望在这方面是一样的。