Это зависит от того, что вы делаете.Если вы занимаетесь тяжелой математикой с векторами или массивами, вы сильно выиграете, если будете использовать пользовательское выравнивание.Например, с avx-512
, когда вы выравниваете свои данные с 64 байтами, вы можете напрямую загружать ваши данные блоками по 8 дублей в регистры zmmm
с помощью _mm512_load_pd
, применять к ним SIMD
инструкции и сохранять их с помощью _mm512_stream_pd
.В противном случае, если вы не будете выполнять тяжелые векторизованные вычисления, вы просто потеряете память, на что указывает drescherjm в его комментарии .
.11 вы можете использовать alignas
спецификатор , например, вы можете определить выровненный массив как:
template <typename T, size_t N, size_t Alignment = 64>
struct alignas(Alignment) AlignedArray : std::array<T, N> {};
И, начиная с C ++ 17, вы можете использовать std::aligned_alloc
для динамически выровненных распределений.