【发布时间】:2012-02-12 12:44:16
【问题描述】:
struct 是否总是与该结构的最大对齐成员对齐?如果没有,如何自动执行,也许使用 gcc 特定的扩展? (我知道有__attribute((aligned(...)))__,但必须明确指定对齐方式)。
这种行为在 c99、c++99 和 c++11 之间有区别吗? c++11 是否有一些额外的规定来强制对齐?
示例:
使用以下代码,Foo 本身会自动对齐到 8 个字节,还是我也需要显式对齐?
struct Foo{
int i __attribute__((aligned(8)));
};
【问题讨论】:
-
@Basile:我添加了示例,应该清楚。
-
复合类型的对齐方式确实是其最大成员的对齐方式。想想那些类型的数组!
-
为什么要担心对齐问题?编译器通常在这方面做得很好!
-
@Basile:当必须对齐的类型(数据包数学)分配到非对齐地址时,我会崩溃。 (你可以放心地假设我问的时候有充分的理由问)
-
@KerrekSB:您能否参考您所说和所写的内容作为答案,以便我接受?谢谢!
标签: c++ struct memory-alignment