【发布时间】:2012-06-12 15:25:07
【问题描述】:
给定一个结构定义,如
struct foo {
int a, b, c;
};
什么是最好的(最简单、最可靠和可移植的)方法来指定它应该始终与 64 位地址对齐,即使在 32 位版本上也是如此?我正在使用 C++11 和 GCC 4.5.2,并希望也支持 Clang。
【问题讨论】:
-
我很好奇;为什么 32 位系统上的对齐方式很重要?或者,实际上,在 64 位系统上,因为该结构通常不需要超过 32 位对齐。
-
一旦编译器支持它,你就可以使用 alignas。
-
@JonathanLefler:我假设允许某些自动 sse 优化。 gcc 最近刚刚添加了一些 __builtin_assume_aligned 来告诉编译器这些东西应该是对齐的。使用gcc.godbolt.org 示例可能会提供更多见解。
-
@PlasmaHH:是的,但 GCC 4.5.2(甚至 4.7.0)没有。而且您必须将 64 位对齐类型传递给
alignas。那么你会通过哪种类型呢? -
因为我打算使用指针的低位作为标记位。典型的用例是 64 位平台和重指针数据结构,给我三个标记位,但我想确保代码在 32 位编译时仍然有效。