を尊重していないキーワードです。しかし、私はW
Sの束を割り当てるしようとすると、その後、私の驚きに、彼らは64バイトにアライメントが合っていないが、実際には16バイトが整列:alignasは私がキャッシュ境界上の私のタイプをoveralignしたいので、私は<code>alignas</code>を使用
#include <iostream>
#include <iomanip>
#include <unordered_map>
struct alignas(64) W { };
int main() {
std::unordered_map<int, int> offset;
for (int i = 0; i < 1000; ++i) {
auto w = new W;
offset[(uintptr_t)w % 64]++;
}
for (const auto& p : offset) {
std::cout << p.first << ' ' << p.second << '\n';
}
}
収量:上
0 250
16 250
32 250
48 250
いくつかのコンパイル(gcc 4.8.2、gcc 5.2.0、clang 3.7.1)。どうしたの?私は整列するように言った、なぜそれは整列していないのですか?
["オーバーライドされた型がサポートされているかどうか(\ [basic.align \])。"](http://eel.is/c++draft/expr.new#1)。 [CWG issue 2130](http://wg21.link/cwg2130)も参照してください。 –
@ T.C。それは答えに違いないようです。 – NathanOliver
@ T.C。実装がそれをサポートしているかどうか(明らかにgccもclangもありません) – Barry