max_align_t在libstdc ++中定义如下:
typedef struct {
long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
} max_align_t;
这些属性不是多余的吗?没有这些属性我得到了相同的结果:
typedef struct {
long long __max_align_ll;
long double __max_align_ld;
} max_align_t;
问题是'这些属性是否有任何原因?'
答案 0 :(得分:2)
如果属性作为另一个结构的成员包含并使用-fpack-struct
或打包#pragma
e.g。
typedef struct {
long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
} max_align_t;
typedef struct {
long long __max_align_ll;
long double __max_align_ld;
} max_align2_t;
struct A {
char c;
max_align_t ma;
};
struct A2 {
char c;
max_align2_t ma;
};
static_assert( sizeof(A) == sizeof(A2), "" );
使用-fpack-struct
断言失败,表明属性会阻止max_align_t
类型错误对齐。