新しいC++11アライメントツールを使用して、一時(スタック)変数のセットが1つのキャッシュラインにあることを確認したかったのです。私の最初の素朴な試みは次のとおりでした。
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