struct
是否始终与该结构的最大对齐成员对齐?如果不是,如何自动执行,也许使用特定于 gcc 的扩展? (我知道有 __attribute((aligned(...)))__
,但必须明确指定对齐方式)。
此行为在 c99、c++99 和 c++11 之间是否不同? c++11 是否有一些额外的规定来强制对齐?
示例:
使用以下代码,Foo
本身会自动对齐到 8 个字节,还是我也需要显式对齐它?
struct Foo{
int i __attribute__((aligned(8)));
};
最佳答案
对齐是系统和处理器特定的属性。允许编译器尽力而为(并且必须了解处理器和系统的对齐约束)。
大多数 ABI 规范(例如 Linux 的 AMD64 ABI)包含一些对齐提示。
我确实相信对齐约束从字段传播到包含它们的聚合(例如 struct
-s)。
如果您对动态分配的数据有不寻常的对齐约束,您可能需要显式对齐,例如通过使用 posix_memalign分配它们。 malloc和相关的分配器(包括 C++ 中的 ::operator new
)可能不会比默认约束要求的更好。
关于c++结构与对齐成员的对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248878/