2012-12-11 70 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)上的值,但調用函數不會將其刪除。這樣我得到堆棧異常。解決方法是使用返回的值,即使我不總是需要它。