我有一个复杂的 C 和 C++ 代码,其中包含大量的数学计算。我使用英特尔 C++ - 编译的最新更新。我使用优化,应用程序没有给出预期的答案。很长一段时间后,我设法将问题减少到 EXCEPTION_FLT_STACK_CHECK 0xc0000092。如果我在没有优化的情况下编译 - 程序按预期工作。
它是 Winxp64 上的单线程代码(应用程序是 32 位)。
MSVC 2010 提供与调试或发布版本相同的结果。(我的意思是好=预期结果)
有人可以帮我在哪里看吗?目前我怀疑一个编译器错误 - 因为我没有自己的汇编代码,只有编译器生成的代码。我查看了汇编器,它是 SSE/x87 混合代码。
我正在寻找寻找的方向。由于我在试用版(英特尔编译器),我没有太多时间进行调查。
我将尝试使用 /Qfp-stack-check tommorow 来查看是否可以发现我的代码有问题。
* 更新 * 我刚刚在 intel 编译器中发现了一个错误。函数在 st(0) 上返回一个值,但调用函数不会删除它。这样我得到堆栈异常。解决方法是使用返回的值,即使我并不总是需要它。我将尝试使用我可以共享的代码来重现它。
在此解决方法之后,英特尔在相同代码上的速度比 msvc2010 快 35%。- 这是主要结果。
莫迪