floppa322, А вот это уже интересный момент. В этом случае, да. выделить непрерывный кусок памяти и руками заполнять объекты - может быть даже имеет смысл. Это важное уточнение, его стоит дописать к вопросу.
В любом случае, такой уровень экономии на спичках имеет реальную ценность только после того, как все остальные способы оптимизации программы уже выполнены, потому что это недалеко от реализации на ассемблере и интринсинках.
0x0000555555559e78 <+88>: movups %xmm1,(%rdx,%rax,1)
0x0000555555559e7c <+92>: movups %xmm0,(%rcx,%rax,1)
Word * words = new (std::align_val_t(16)) Word[N];
Half * halfs = new (std::align_val_t(16)) Half[N];
Чтобы операцию можно было векторизовать, у тебя данные довольно строго должны укладываться в 128 бит. Желательно еще и выравнивание на 16 байт сделать.
LLVM/Clang is the primary (or only) compiler for many gaming platforms these days. iOS, Android, PlayStation 4, MacOS/OSX, and Nintendo Switch all use Clang as their default native compiler.
XBox One is only supported by Microsoft's compiler, and their compiler is also still the most commonly used for Windows.