[Visual С++] Принудительное выравнивание памяти переменных/структур данных

Я смотрю на использование SSE, и я собираю данные о выравнивании по границам 16 байт. Существует два случая:

float data[4];

struct myystruct
{
 float x,y,z,w;
};

Я не уверен, что первый случай может быть выполнен явно, хотя, возможно, есть опция компилятора, которую я мог бы использовать? Во втором случае я помню, как несколько лет назад можно было контролировать упаковку в старых версиях GCC, возможно ли это?

Ответ 1

Для статического массива вы можете использовать

__declspec(align(16)) float data[4];

Для динамически распределенного массива используйте _aligned_malloc и _aligned_free. Для управления выравниванием структурных элементов используйте пакет #pragma.