这个C ++代码有什么作用?为什么会有__attribute__
?
struct foo { double t[4] __attribute__((aligned(64))); };
答案 0 :(得分:3)
来自http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Type-Attributes.html:
aligned (alignment)
此属性指定指定类型的变量的最小对齐(以字节为单位)。例如,声明:
struct S { short f[3]; } __attribute__ ((aligned (8))); typedef int more_aligned_int __attribute__ ((aligned (8)));
强制编译器确保(尽可能)确保每个类型为struct S或more_aligned_int的变量至少在8字节边界上进行分配和对齐。在SPARC上,将struct S类型的所有变量对齐到8字节边界允许编译器在将struct S类型的一个变量复制到另一个变量时使用ldd和std(双字加载和存储)指令,从而提高运行时效率
请注意,ISO C标准要求任何给定结构或联合类型的对齐至少是所讨论的结构或联合的所有成员的对齐的最低公倍数的完美倍数。这意味着您可以通过将对齐的属性附加到此类型的任何一个成员来有效地调整结构或联合类型的对齐方式,但上面示例中说明的符号是一种更明显,直观且可读的方式请求编译器调整整个struct或union类型的对齐方式。
因此,该代码有效地要求编译器将t
对齐在64字节边界上(通常,它将在8字节边界上对齐,因为它是{{1}的数组})。