如果结构声明没有__attribute__(align(8))
,我希望编译器为我生成警告。
例如,如果结构声明如下:
struct my_float {
float number;
} __attribute__((aligned(8)));
它不会产生任何警告。但是,如果我声明另一个这样的结构:
struct my_float {
float number;
};
编译器会为我生成警告。
我的工作环境是linux / GCC。
答案 0 :(得分:1)
我认为您不能自动检查所有结构,但您仍然可以通过以下方式手动检查对齐:
// x % 16 <=> x & (16-1) (avoid using modulo operator)
#define MODULO_16_MASK 0xFU
ASSERT_COMPILE((sizeof(my_float) & MODULO_16_MASK) == 0);
如果您的结构未对齐,则应在编译时触发警告。
答案 1 :(得分:0)
根据经验,这是不可能的。 此属性指定指定类型的变量的最小对齐(以字节为单位)。
struct S { short f[3]; } __attribute__ ((aligned (8)));
typedef int more_aligned_int __attribute__ ((aligned (8)));
强制编译器,每个类型为struct S或more_aligned_int的变量至少在8字节边界上分配和对齐。