Sintomi
Si utilizza l'opzione /Ot (Ottimizza per velocità codice) quando si compila un'applicazione che viene configurata per la x64 piattaforma Microsoft Visual Studio 2005 Service Pack 1 (SP1). Quando si esegue l'applicazione, alcune istruzioni se possono essere eseguite in modo non corretto. Di conseguenza, i risultati sono imprevedibili. Le istruzioni if , ad esempio, possono essere ignorate nel codice dell'applicazione generato.
Questo problema si verifica solo nel seguente scenario.
-
Esistono alcune istruzioni MOV tra due operazioni di confronto.
-
Questi confrontare operazioni utilizza gli stessi operandi.
-
I valori degli operandi vengono modificati dalle istruzioni MOV.
In questo scenario, le istruzioni se la seconda operazione di confronto possono essere ignorate.
Note
-
Questo problema può verificarsi anche quando si utilizza l'opzione /O2 o /Ox per compilare l'applicazione.
-
Questo problema non si verifica sul x86 platform.
Causa
Questo problema si verifica perché l'utilità di ottimizzazione del compilatore presuppone erroneamente che è possibile utilizzare il flag impostato dall'operazione di XOR senza includere un'operazione di confronto.
Risoluzione
Informazioni sull'hotfix
Un hotfix supportato è disponibile da Microsoft. Tuttavia, questo hotfix è destinato esclusivamente alla correzione del problema descritto in questo articolo. Applicare questo hotfix solo ai sistemi in cui si verifica il problema descritto in questo articolo. Questo hotfix potrebbe essere sottoposto ad ulteriori test. Se il problema non causa gravi difficoltà, si consiglia di attendere il successivo aggiornamento software contenente tale hotfix.
Se l'hotfix è disponibile per il download, è presente una sezione "Hotfix disponibile per il download" all'inizio di questo articolo della Knowledge Base. Se questa sezione non viene visualizzata, contattare il servizio clienti Microsoft e supporto tecnico per ottenere l'hotfix.
Nota: Se si verificano ulteriori problemi o se è necessaria attività di risoluzione aggiuntiva, potrebbe essere necessario creare una richiesta di assistenza separata. I costi di supporto normale verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare specifico hotfix in questione. Per un elenco completo dei numeri di telefono del servizio clienti Microsoft e supporto tecnico o per creare una richiesta di assistenza separata, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/contactus/?ws=supportNota: Il modulo "Hotfix disponibile per il download" Visualizza le lingue per cui è disponibile l'hotfix. Se non viene visualizzata la lingua, è perché un aggiornamento rapido non è disponibile per tale lingua.
Prerequisiti
È necessario disporre di Visual Studio 2005 SP1 per applicare questo hotfix.
Richiesta di riavvio
Non è necessario riavviare il computer dopo avere applicato questo hotfix.
Informazioni sulla sostituzione dell'aggiornamento rapido
Questo hotfix non sostituisce eventuali altri aggiornamenti rapidi.
Informazioni sui file
La versione inglese di questo hotfix presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e ore dei file sono elencate in base al formato UTC (Coordinated Universal Time Coordinated). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e ora locale, utilizzare la scheda fuso orario nell'elemento di Data e ora nel Pannello di controllo.
Nome del file |
Versione del file |
Dimensione del file |
Data |
Ora |
Piattaforma |
---|---|---|---|---|---|
C2.dll |
14.0.50727.3080 |
2,273,280 |
19-Nov-2008 |
18:52 |
x86 |
C2.dll |
14.0.50727.3080 |
7,192,576 |
19-Nov-2008 |
23:25 |
IA-64 |
C2.dll |
14.0.50727.3080 |
2,490,368 |
19-Nov-2008 |
23:26 |
x86 |
C2.dll |
14.0.50727.3080 |
3,600,384 |
19-Nov-2008 |
23:33 |
x64 |
C2.dll |
14.0.50727.3080 |
2,203,648 |
19-Nov-2008 |
23:33 |
x86 |
Soluzione alternativa
Per risolvere questo problema, utilizzare uno dei seguenti metodi:
-
Utilizzare la parola chiave volatile quando si dichiarano le variabili utilizzate nelle istruzioni se .
-
Disattivare l'opzione di ottimizzazione della velocità. Ad esempio, sostituire l'opzione /Ot con l'opzione /Os (Ottimizza per dimensione codice) . In alternativa, è possibile utilizzare l'opzione /O1 invece l'opzione /O2 o /Ox .
-
Aggiungere una riga di codice prima di istruzioni if nella seconda operazione di confronto. Ad esempio, aggiungere un'istruzione printf .
Stato
Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".
Ulteriori informazioni
Per ulteriori informazioni sul codice di uno o più istruzioni possono essere eseguite in modo non corretto quando si utilizza la funzionalità di ottimizzazione del codice in Visual Studio 2005, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
925792 una o più istruzioni di codice possono essere eseguite in modo non corretto quando si utilizza la funzionalità di ottimizzazione del codice in Visual Studio 2005
Per ulteriori informazioni sulla terminologia degli aggiornamenti software, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
824684 descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft