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