Я знаю, что XMVECTOR должен быть выровнен по 16 байт и поэтому не должен быть членом класса (если только я не обеспечиваю выравнивание). Однако могу ли я это сделать?
class A
{
public:
XMVECTOR vect;
};
void fun(void)
{
A a;
XMVECTOR localVect = a.vect;
// can I now use localVect correctly?
}
Компилятор, скорее всего, будет использовать movaps для реализации назначения, которое потерпит неудачу из-за выравнивания на большинстве процессоров.
Способ сделать это не требует выравнивания - использовать:
class A { public: XMFLOAT4 vect; } ... XMVECTOR localVec = XMLoadFloat4( &a.vect );
Это скомпилируется с одним движением.
XMFLOAT4
, я прочитал документ, но мне было интересно, если это было необходимо.