2

这段 C++ 代码有什么作用?怎么__attribute__会有?

struct foo { double t[4] __attribute__((aligned(64))); };
4

1 回答 1

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 标准要求任何给定结构或联合类型的对齐至少是相关结构或联合的所有成员的对齐的最小公倍数的完美倍数。这意味着您可以通过将对齐属性附加到此类类型的任何一个成员来有效地调整结构或联合类型的对齐方式,但是上面示例中说明的符号是一种更明显、直观和易读的方式请求编译器调整整个结构或联合类型的对齐方式。

因此,有问题的代码有效地要求编译器t在 64 字节边界上对齐(通常,它会在 8 字节边界上对齐,因为它是 的数组double)。

于 2012-10-08T02:42:06.357 回答