狀況
當您建置應用程式是在 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描述