-1

我创建了一个 SSE 驱动的矢量类。

我在一个定期调用的缺陷函数中创建了它的一个实例,这会导致我的程序开始时崩溃。在将其声明为全局的情况下不会发生此问题。

错误消息:进程返回 -1073741819 (0xC0000005) 执行时间:3.471 s

这是简化的类:

#include <mmintrin.h>

alignas(16) class v3
{
  public:

    // constructors
    inline v3() : m(_mm_setzero_ps()) {}
    inline v3(float x, float y, float z) : m(_mm_set_ps(0, z, y, x)) {}

    inline v3(__m128 m) : m(m) {}


    // Member variables
    union
    {
        struct { float x, y, z; };
        __m128 m;
    };
};

任何想法?

4

2 回答 2

1

错误代码0xC0000005是访问冲突。当涉及 SSE 时,这总是意味着您正在尝试未对齐的内存访问。您需要确定哪个操作使用未对齐的操作数。

于 2013-07-26T20:57:19.607 回答
0

我假设您使用的是 Visual C++,因为您提到了 windows 样式的错误代码。根据MSDN,Visual C++ 不支持alignasalignof. 使用 可能会有更好的运气std::aligned_storage,例如:

union {
    _m128 m;
    struct { float x,y,z };
    std::aligned_storage<16> storage;
};
于 2013-07-26T21:43:33.973 回答