结构与对齐成员的c ++对齐方式

时间:2012-02-12 12:44:16

标签: c++ struct memory-alignment

struct是否始终与该结构的最大对齐成员对齐?如果没有,如何自动实施,可能使用特定于gcc的扩展? (我知道有__attribute((aligned(...)))__,但必须明确指定对齐方式。

这种行为在c99,c ++ 99和c ++ 11之间是否有所不同? c ++ 11是否有一些额外的条款来强制执行对齐?

示例: 使用以下代码,Foo本身是否会自动与8个字节对齐,或者我是否需要明确对齐它?

struct Foo{
    int i __attribute__((aligned(8)));
};

1 个答案:

答案 0 :(得分:1)

Alignment是系统和处理器特定的属性。允许编译器尽力(并且必须知道处理器和系统的对齐约束)。

大多数ABI规范(例如Linux的AMD64 ABI)都包含一些对齐提示。

我确实认为对齐约束会从字段传播到包含它们的聚合(例如struct - s)。

如果对动态分配的数据有不寻常的对齐约束,则可能需要显式对齐,例如:使用posix_memalign分配它们。 malloc和相关的分配器(包括C ++中的::operator new)可能不会比默认约束所需的更好地对齐。