狀況

當您建置應用程式是在 x64 設定時,會使用/Ot (偏好快的程式碼)編譯器選項在 Microsoft Visual Studio 2005 Service Pack 1 (SP1) 中的平台。當您執行應用程式時,某些if陳述式可能無法正確地執行。因此,結果是無法預期的。例如, if陳述式可能會略過的應用程式產生的程式碼。下列情況中才會發生這個問題。

  • 有兩個比較作業之間有些 MOV 指令。

  • 這些比較作業使用相同的運算元。

  • 運算元的值會變更 MOV 指示。

在這個案例中,第二個比較作業中的if陳述式可能會略過。注意事項

  • 當您建置應用程式使用/O2選項或/Ox選項時,也可能會發生這個問題。

  • 不會發生這個問題,這是在 x86 平台。

原因

之所以發生這個問題,是因為編譯器最佳化器不正確假設由 XOR 運算所設定的旗標可以不用包括比較作業。

解決方案

Hotfix 資訊

支援的 hotfix 可從 Microsoft 取得。不過,此 Hotfix 僅用於修正本文中所述的問題。此 hotfix 只適用於發生本文所述之問題的系統。此 hotfix 可能會接受其他測試。因此,如果此問題的影響不會很嚴重,我們建議您等候含此 hotfix 的下一版軟體更新。如果 hotfix 可供下載,在此知識庫文件頂端將出現「可用的 Hotfix」區段。如果這個區段沒有出現,請連絡 Microsoft 客戶服務及支援以取得 hotfix。注意如果發生其他問題,或如果需要進行疑難排解,您可能必須建立個別的服務要求。收取支援費用會套用到其他支援問題和此特定 hotfix 無法解決的問題。如 Microsoft 客戶服務及支援的電話號碼或建立個別的服務要求的完整清單,請造訪下列 Microsoft 網站︰

http://support.microsoft.com/contactus/?ws=support注意「 下載 Hotfix 」 表單會顯示 hotfix 可用的語言。如果看不到您的語言,是因為未提供該語言的 Hotfix 。

先決條件

您必須套用此 hotfix 之後安裝 Visual Studio 2005 SP 1。

重新啟動需求

您不必套用此 hotfix 之後,重新啟動電腦。

Hotfix 取代資訊

此 hotfix 不會取代任何其他 hotfix。

檔案資訊

此 hotfix 的英文版具有下列表格中所列檔案屬性 (或較新的檔案屬性)。這些檔案的日期和時間會以國際標準時間 (UTC) 格式列出。當您檢視檔案資訊時,會將它轉換為本地時間。若要查看 UTC 與當地時間的時差,請在 [控制台] 中的日期和時間項目使用 [時區] 索引標籤。

檔案名稱

檔案版本

檔案大小

日期

時間

平台

C2.dll

14.0.50727.3080

2,273,280

2008 年 11 月 19 日

18:52

x86

C2.dll

14.0.50727.3080

7,192,576

2008 年 11 月 19 日

23:25

IA-64

C2.dll

14.0.50727.3080

2,490,368

2008 年 11 月 19 日

23:26

x86

C2.dll

14.0.50727.3080

3,600,384

2008 年 11 月 19 日

23:33

x64

C2.dll

14.0.50727.3080

2,203,648

2008 年 11 月 19 日

23:33

x86

因應措施

若要解決這個問題,請使用下列方法之一︰

  • 當您宣告的if陳述式中所使用的變數時,請使用 volatile 關鍵字。

  • 停用的速度最佳化] 選項。例如, /Ot選項取代/Os (偏好小的程式碼) ] 選項。或者,您也可以使用 [ /O1 ] 選項,而不是/O2選項或/Ox選項。

  • If陳述式,在第二個比較作業之前,請加入程式碼行。例如,加入printf陳述式。

狀態

Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。

更多的資訊

如需有關一或多個程式碼陳述式可能無法正確地執行,當您使用 Visual Studio 2005年中的程式碼最佳化的功能,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件︰

925792一或多個程式碼陳述式可能無法正確地執行當您使用 Visual Studio 2005年中的程式碼最佳化的功能如需有關軟體更新術語的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

用來描述 Microsoft 軟體更新標準術語的編號 824684描述

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。