具有对齐成员的结构的c++对齐



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

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

示例:使用以下代码,Foo本身会自动对齐到8个字节吗?还是我也需要显式对齐它?

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

Alignment是一个特定于系统和处理器的属性。编译器被允许尽其所能(并且必须了解处理器和系统的对齐约束)。

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

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

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

最新更新