Используйте XMVECTOR в качестве члена класса

Я знаю, что XMVECTOR должен быть выровнен по 16 байтов и, следовательно, не должен быть членом класса (если я не гарантирую выравнивание). Тем не менее, я могу сделать что-то подобное?

class A
{
    public:
    XMVECTOR vect;
};

void fun(void)
{
    A a;
    XMVECTOR localVect = a.vect;
    // can I now use localVect correctly?
}

1 ответ

Компилятор, вероятно, будет использовать movaps для реализации присваивания, что не удастся из-за выравнивания на большинстве процессоров.

Чтобы сделать это не требующим выравнивания, используйте:

class A { public: XMFLOAT4 vect; } ... XMVECTOR localVec = XMLoadFloat4( &a.vect );

Это компилируется в единую программу.

Другие вопросы по тегам