2012-12-11 34 views
2

我有一个复杂的C和C++代码,数学计算繁重。我使用英特尔C++ - 最新的更新来编译。我使用optimizatons,应用程序不会给出预期的答案。很长一段时间后,我设法减少问题得到EXCEPTION_FLT_STACK_CHECK 0xc0000092。如果我没有优化编译 - 程序按预期工作。检测EXCEPTION_FLT_STACK_CHECK的原因

它是在Winxp64单线程代码(该应用程序是32位)。

MSVC 2010与调试或发布版本相同的结果。 (我的意思是好的=预期的结果)

有人可以帮助我在哪里看?目前我怀疑是一个编译器错误 - 因为我没有我自己的asmsembly代码,只有编译器生成的代码。我看了看汇编器,它是SSE/x87混合代码。

我正在寻找寻找路线。由于我正处于试用版(英特尔编译器),因此我没有太多时间进行调查。

我会尝试使用/ QFP-堆栈检查明天,看看我能找到的东西错我的代码。

*更新* 我刚在intel编译器中发现了一个bug。函数返回st(0)上的值,但调用函数不会将其删除。这样我得到堆栈异常。解决方法是使用返回的值,即使我不总是需要它。我会尝试用我可以分享的代码重现它。

解决此问题后,intel在同一代码上的速度提高了35%,然后msvc2010。 - 这是主要结果。

mordy

+2

邮政代码周围的'EXCEPTION_FLT_STACK_CHECK'发生在IP为中心。 –

+0

我不确定我能做到。我只是在寻找方向和可能的原因。 –

+1

你是否偶然使用borland C++ builder?如果是这样,http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6563244 – crh225

回答

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