我创建了一个SSE驱动的矢量类。
我在一个定期调用的reduce函数中创建了一个它的实例,这导致在程序开始时崩溃。在将其声明为全局的情况下,问题不会发生。
错误消息:进程返回-1073741819(0xC0000005)执行 时间:3.471秒
这是简化的课程:
#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;
};
};
有什么想法吗?
答案 0 :(得分:1)
错误代码0xC0000005
是访问冲突。当涉及SSE时,这总是意味着您正在尝试未对齐的内存访问。您需要确定哪个操作使用未对齐的操作数。
答案 1 :(得分:0)
我假设你使用的是Visual C ++,因为你提到了windows风格的错误代码。根据{{3}},Visual C ++不支持alignas
或alignof
。使用std::aligned_storage
可能会有更好的运气,例如:
union {
_m128 m;
struct { float x,y,z };
std::aligned_storage<16> storage;
};