2014-01-04 2 views
0

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

class A 
{ 
    public: 
    XMVECTOR vect; 
}; 

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

ответ

0

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

Способ сделать это не требует выравнивания заключается в использовании:

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

компилируется к одному movups.

+0

Я знаю о 'XMFLOAT4', я прочитал документ, но мне было интересно, если это необходимо. – NPS

+0

Необходимо быть портативным с ARM или x86 (32-разрядными) платформами. если вас интересуют только платформы x64 (64-разрядные), вы можете просто просто использовать XMVECTOR и XMMATRIX напрямую в большинстве случаев - есть вещи, которые могут изменить выравнивание по умолчанию класса, что может вызвать проблемы. –

Смежные вопросы