Update: Wenn Sie eine Anwendung, die Ausführen mit der Compileroption/Ot in Microsoft Visual Studio 2005 Service Pack 1 (SP1) basiert, können einige "if"-Anweisung nicht ordnungsgemäß ausgeführt


Problembeschreibung


Beim Erstellen einer Anwendung, die auf die X64 konfiguriert ist, verwenden Sie die Compileroption/Ot (schnellen Code bevorzugen) Plattform in Microsoft Visual Studio 2005 Service Pack 1 (SP1). Beim Ausführen der Anwendungdes können einige Wenn Anweisungen nicht ordnungsgemäß ausgeführt. Daher sind die Ergebnisse unvorhersehbar. Wenn Anweisungen können z. B. im generierten Code der Anwendung übersprungen.

Dieses Problem tritt nur im folgenden Szenario.
  • Es gibt einige MOV Anweisungen zwischen zwei vergleichen.
  • Diese vergleichen Operationen mit denselben Operanden.
  • Die Operanden werden von MOV-Anweisungen geändert.
In diesem Szenario können die Wenn -Anweisungen im zweiten Vergleichsvorgang übersprungen.

Hinweise
  • Dieses Problem kann auch auftreten, wenn die Option/O2 oder/Ox verwenden, um die Anwendung zu erstellen.
  • Dieses Problem tritt nicht auf die X86 Plattform.

Ursache


Dieses Problem tritt auf, weil der Compiler Optimierer falsch setzt voraus, dass das Flag XOR-Operation festgelegt verwendet werden kann, ohne eine Vergleichsoperation.

Problemlösung


Hotfix-Informationen

Ein unterstützter Hotfix ist von Microsoft erhältlich. Dieser Hotfix soll nur der Behebung des Problems dienen, das in diesem Artikel beschrieben wird. Wenden Sie dieses Hotfix nur auf Systeme an, bei denen das in diesem Artikel beschriebene Problem auftritt. Dieser Hotfix sollte weiteren Tests unterzogen werden. Wenn Ihr System durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfehlen wir sie, auf das nächste Softwareupdate zu warten, das diesen Hotfix enthält.

Wenn der Hotfix zum Download zur Verfügung steht, gibt es einen Abschnitt "Hotfixdownload available" ("Hotfixdownload verfügbar"), am oberen Rand dieses Knowledge Base-Artikel. Wenn dieser Abschnitt nicht angezeigt wird, wenden Sie sich an den Microsoft Customer Service and Support, um den Hotfix zu erhalten.

Hinweis Falls weitere Probleme auftreten oder andere Schritte zur Problembehandlung erforderlich sind, müssen Sie möglicherweise eine separate Serviceanfrage erstellen. Die normalen Supportkosten gelten für zusätzliche Supportfragen und Probleme, die nicht diesem speziellen Hotfix zugeordnet werden können. Für eine vollständige Liste der Telefonnummern des Microsoft Customer Service and Support, oder um eine separate Serviceanfrage zu erstellen, gehen Sie auf folgende Microsoft-Website:Hinweis Das Formular "Hotfix download available" ("Hotfixdownload verfügbar") zeigt die Sprachen an, für die der Hotfix verfügbar ist. Wenn Ihre Sprache nicht angezeigt wird, ist dieser Hotfix für Ihre Sprache nicht verfügbar.

Voraussetzungen

Sie müssen Visual Studio 2005 SP 1 installiert, um diesen Hotfix anwenden.

Neustartanforderung

Sie müssen keinen Neustart des Computers nach der Installation dieses Hotfixes durchführen.

Informationen zu ersetzten Hotfixes

Dieser Hotfix ersetzt keine anderen Hotfixes.

Dateiinformationen

Die englische Version dieses Hotfixes weist Dateiattribute (oder spätere Attribute), die in der folgenden Tabelle aufgelistet sind. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) aufgelistet. Wenn Sie die Dateiinformationen anzeigen, werden sie in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu finden, verwenden Sie die Registerkarte Zeitzone unter Datum und Uhrzeit in der Systemsteuerung.
DateinameDateiversionDateigrößeDatumZeitPlattform
C2.dll14.0.50727.30802,273,28019. November 200818:52x86
C2.dll14.0.50727.30807,192,57619. November 200823:25IA-64
C2.dll14.0.50727.30802,490,36819. November 200823:26x86
C2.dll14.0.50727.30803,600,38419. November 200823:33x64
C2.dll14.0.50727.30802,203,64819. November 200823:33x86

PROBLEMUMGEHUNG


Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden:
  • Verwenden Sie das volatile-Schlüsselwort, wenn Sie Variablen deklarieren, die in der Wenn -Anweisung verwendet werden.
  • Deaktivieren Sie Optimierung von Geschwindigkeit. Beispielsweise ersetzen Sie die/Ot -Option mit der Option/OS (kleinen Code bevorzugen) . Oder verwenden Sie die Option/O1 anstelle der Option/O2 oder/Ox .
  • Hinzufügen einer Codezeile, bevor Wenn Anweisungen im zweiten Vorgang vergleichen. Beispielsweise eine Printf -Anweisung hinzufügen.

Status


Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Weitere Informationen


Weitere Informationen über eine oder mehrere Code, Aussagen falsch ausgeführt werden können, wenn die Optimierungsfunktion Code in Visual Studio 2005 verwenden klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:

925792 mindestens Befehlscode möglicherweise nicht ordnungsgemäß ausgeführt, wenn die Optimierungsfunktion Code in Visual Studio 2005 verwenden

Um weitere Informationen zur Terminologie für Softwareupdates zu erhalten, klicken Sie auf die folgende Artikelnummer, um den Artikel der Microsoft Knowledge Base anzuzeigen:
824684 Erläuterung von der standardmäßigen Standardbegriffen bei Microsoft Softwareupdates