Код: Выделить всё
vector< alignas(64) vector > my_vector;
// or
vector< alignas(std::hardware_destructive_interference_size) vector > my_vector;
Потребность в API внедрения < /h2>
Простой способ может быть чем-то вроде < /p>
template
struct AlignedObject {
alignas(Alignment) T object;
};
but this adds extra wrapping (requiring access through .object).
I'm looking to declare just the alignment, without having to change the interface through which my_vector needs to be accessed, so that the solution is a proper API-compatible drop-in replacement for vector with the same constructors, methods, Поведение, будущая защита (когда std :: vector может быть изменена в будущем) и т. Д. Чрезвычайно часто имеет параллелизированный цикл, где каждая итерация цикла записывает свой собственный выходной вектор , поэтому необходим вектор . Но потому что поля размера векторов находятся рядом друг с другом (вписываются в одну и ту же линию кэша), ложное совместное использование триггеры и, например, push_back () из одного потока замедляет то, что другой поток. Это объясняется, например, В выступлении «быстрее, чем memcpy».
Изменить: альтернативное решение этой подпрофса с помощью std :: move ()
Комментатор Loki Astari указывает ниже, что в большинстве случаев это может решать STD: Поля метаданных, спланированные с помощью стека, на которых могут быть выполнены быстрые обновления (например, изменение размера (например, изменение размера (Код: Выделить всё
__end_std::array< /* insert solution approach here */, 10> my_vector;
< /code>
Связанные вопросы < /h2>
Использование выравниваний в шаблоне аргумента STD :: Vector
-почти те же вопросы, что и я, но вопрос был неправильным, так как спрашитель на самом деле не намеревался, чтобы выровнять индивидуальные элементы, так, что это было неправильно, так как это было неправильно. /> < /ul>
< /li>
< /ul>
Спасибо! < /p>
Подробнее здесь: https://stackoverflow.com/questions/796 ... lated-type
Мобильная версия