我知道XMVECTOR必须是16字节对齐的,因此不应该是类的成员(除非我确保对齐)。但是,我可以这样做吗?
class A
{
public:
XMVECTOR vect;
};
void fun(void)
{
A a;
XMVECTOR localVect = a.vect;
// can I now use localVect correctly?
}
编译器可能会使用 movaps 来实现赋值,由于大多数 CPU 上的对齐,这将失败。
使这不需要对齐的方法是使用:
class A { public: XMFLOAT4 vect; } ... XMVECTOR localVec = XMLoadFloat4( &a.vect );
这将编译为单个移动。