Poprawka: Podczas uruchamiania aplikacji, która jest tworzona przy użyciu opcji kompilatora/OT w Microsoft Visual Studio 2005 z dodatkiem Service Pack 1 (SP1) niektóre instrukcji "if" mogą działać niepoprawnie


Objawy


Użyj opcji kompilatora/OT (korzyść szybko kod) podczas tworzenia aplikacji, która jest skonfigurowana na x64 platformy w Microsoft Visual Studio 2005 z dodatkiem Service Pack 1 (SP1). Po uruchomieniu aplikacji, niektóre instrukcji Jeżeli mogą działać niepoprawnie. W związku z tym wyniki są nieprzewidywalne. Na przykład Jeśli instrukcje mogą zostać pominięte w wygenerowanym kodzie aplikacji.

Ten problem występuje tylko w następującym scenariuszu.
  • Istnieją pewne wskazówki MOV między dwie operacje porównywania.
  • Porównać te operacje użycia tym samym operandy.
  • Wartości argumentów są zmieniane przez instrukcje MOV.
W tym scenariuszu mogą zostać pominięte instrukcji Jeżeli w drugiej operacji porównywania.

Uwagi
  • Ten problem może również wystąpić, gdy używasz opcji/O2 lub opcji/OX do tworzenia aplikacji.
  • Ten problem nie występuje na x86 platformy.

Przyczyna


Ten problem występuje, ponieważ Optymalizator kompilator błędnie zakłada, że flagi, która jest ustawiana przez operacji XOR może być używany bez dołączania operacja porównania.

Rozwiązanie


Informacje o poprawce

Obsługiwana poprawka jest udostępniana przez firmę Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Zastosuj poprawkę tylko w systemach, w których występuje problem opisany w tym artykule. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następną aktualizację oprogramowania zawierającą tę poprawkę.

Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, skontaktuj się z Obsługą i Wsparciem Klienta Microsoft w celu uzyskania poprawki.

Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej i obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi, odwiedź następującą witrynę firmy Microsoft w sieci Web:Uwaga "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka.

Wymagania wstępne

Musi mieć Visual Studio 2005 z dodatkiem SP 1 zainstalować tę poprawkę.

Wymagania dotyczące ponownego uruchomienia

Nie musisz ponownie uruchomiać komputera po zastosowaniu tej poprawki.

Informacje dotyczące zastępowania poprawek

Ta poprawka nie zastępuje żadnych innych poprawek.

Informacje o plikach

Wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom zostały podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w aplecie Data i godzina w Panelu sterowania.
Nazwa plikuWersja plikuRozmiar plikuDataGodzinaPlatforma
C2.dll14.0.50727.30802,273,28019-lis-200818:52x86
C2.dll14.0.50727.30807,192,57619-lis-200823:25IA-64
C2.dll14.0.50727.30802,490,36819-lis-200823:26x86
C2.dll14.0.50727.30803,600,38419-lis-200823:33x64
C2.dll14.0.50727.30802,203,64819-lis-200823:33x86

Obejście problemu


Aby obejść ten problem, użyj jednej z następujących metod:
  • Słowo kluczowe volatile należy użyć przy deklarowaniu zmiennych, które są używane w instrukcji Jeżeli .
  • Wyłącz opcję optymalizacji szybkości. Na przykład można zastąpić opcję/OT z opcją/OS (kod małych korzyść) . Lub użyć opcji/O1 zamiast opcji/O2 lub opcji/OX .
  • Dodaj wiersz kodu przed operacji porównaj instrukcji Jeżeli w drugim. Na przykład dodać instrukcję printf .

Stan


Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji


Aby uzyskać więcej informacji o jeden lub więcej kodów, które instrukcji może działać niepoprawnie podczas korzystania z funkcji optymalizacji kodu w programie Visual Studio 2005 kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

925792 jedną lub więcej instrukcji kodu mogą działać niepoprawnie podczas korzystania z funkcji optymalizacji kodu w programie Visual Studio 2005

Aby uzyskać więcej informacji dotyczących terminologii aktualizacji oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft