检测EXCEPTION_FLT_STACK_CHECK的原因

时间:2012-12-11 18:44:52

标签: visual-c++ intel sse x87

我有一个复杂的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

1 个答案:

答案 0 :(得分:2)

  • 更新*我刚刚在intel编译器中发现了一个错误。函数在st(0)上返回一个值,但调用函数不会删除它。这样我得到了堆栈异常。解决方法是使用返回的值,即使我不总是需要它。