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