这是数据对齐崩溃吗? (可能涉及堆栈错位,XNAMath,Visual Studio 2103)

Is this a data alignment crash? (potentially involving stack misalignment, XNAMath, Visual Studio 2103)

我的 Win32、DirectX 游戏在处理向量和矩阵的代码中以发布模式崩溃。具体来说,崩溃发生在这条指令上:

014E2752 unpcklps xmm1,xmmword ptr [esp+3Ch]

First-chance exception at 0x014E2752 in RodinaRelease.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF

我不太了解汇编和寄存器,但看来 esp = 0x0043f31c 会使 esp+3Ch = 0x0043f358

现在,根据this and thisunpcklps指令是一条SSE指令,需要16字节对齐。 0x0043f358 不是 16 字节对齐的,对吗?我认为堆栈对齐是我崩溃的原因是对的吗?

如果是这样,我做了什么值得这个????我在我的游戏中不使用 SSE 指令,所以我可以忽略像这样的对齐问题 - 是 naive/wrong 吗?有什么办法可以关闭此行为吗?

相关要点:

有关详细信息,请参阅

请记住,用于 x86 的 VS 2013 默认使用 /arch:SSE2,因此即使定义了 _XM_NO_INTRINSICS_,编译器仍将使用 SSE/SSE2。出于这个原因,您可能应该停止使用 _XM_NO_INTRINSICS_ 并让您的代码正确使用 DirectXMath 或 XNAMath。

就是说,您可以尝试使用 /arch:IA32 构建以强制 Visual Studio 使用旧式 x87 而不是 SSE/SSE2...