使用 XMVECTOR 作为类成员

Use XMVECTOR as a class member

本文关键字:成员 XMVECTOR 使用      更新时间:2023-10-16

我知道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 );

这将编译为单个移动。