【问题标题】:Detecting the reason for EXCEPTION_FLT_STACK_CHECK检测 EXCEPTION_FLT_STACK_CHECK 的原因
【发布时间】: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


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

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2012-07-25
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多