使用新的 C++11 对齐工具,我想确保一组临时(堆栈)变量位于一个缓存行中。我的第一次天真的尝试如下:
int main() {
alignas(64) int a; // 0x7fffc58aac80, properly aligned at 64
int b; // 0x7fffc58aac7c
int c; // 0x7fffc58aac78
return 0;
}
愚蠢的我!堆栈不会以这种方式分配变量,因此a
将位于不同的缓存行b
上c
。
这是否意味着正确对齐多个变量的唯一方法是通过聚合?
struct alignas(64) Abc {
int x;
int y;
int z;
};
int main() {
Abc foo;
// x 0x7fff40c2d3c0 (aligned at 64)
// y 0x7fff40c2d3c4
// z 0x7fff40c2d3c8
return 0;
}
编译器:Clang 3.2