struct
是否始终与该结构的最大对齐成员对齐?如果没有,如何自动实施,可能使用特定于gcc的扩展? (我知道有__attribute((aligned(...)))__
,但必须明确指定对齐方式。
这种行为在c99,c ++ 99和c ++ 11之间是否有所不同? c ++ 11是否有一些额外的条款来强制执行对齐?
示例:
使用以下代码,Foo
本身是否会自动与8个字节对齐,或者我是否需要明确对齐它?
struct Foo{
int i __attribute__((aligned(8)));
};
答案 0 :(得分:1)
Alignment是系统和处理器特定的属性。允许编译器尽力(并且必须知道处理器和系统的对齐约束)。
大多数ABI规范(例如Linux的AMD64 ABI)都包含一些对齐提示。
我确实认为对齐约束会从字段传播到包含它们的聚合(例如struct
- s)。
如果对动态分配的数据有不寻常的对齐约束,则可能需要显式对齐,例如:使用posix_memalign分配它们。 malloc和相关的分配器(包括C ++中的::operator new
)可能不会比默认约束所需的更好地对齐。