Sintomas
Utilizar a opção do compilador de /Ot (Favor rápida código) durante a criação de uma aplicação que está configurada o x64 plataforma do Microsoft Visual Studio 2005 Service Pack 1 (SP1). Quando executa a aplicação, algumas instruções se podem ser executados incorrectamente. Por conseguinte, os resultados são imprevisíveis. Por exemplo, as declarações se poderão ser ignoradas no código gerado da aplicação.
Este problema só ocorre no seguinte cenário.
-
Existem algumas instruções MOV entre duas operações de comparação.
-
Estes comparar a utilização de operações os operandos mesmos.
-
Os valores dos operandos são alterados do manual de MOV.
Neste cenário, poderão ser ignoradas as instruções se a segunda operação de comparação.
Notas
-
Este problema também poderá ocorrer quando utiliza a opção de /O2 ou a opção de /Ox para criar a aplicação.
-
Este problema não ocorre na x86 plataforma.
Causa
Este problema ocorre porque o Optimizador de compilador incorrectamente assume que o sinalizador que é definido pela operação XOR pode ser utilizado sem incluir uma operação de comparação.
Resolução
Informações sobre correção
Existe uma correção suportada pela Microsoft. No entanto, esta correção destina-se apenas a corrigir o problema descrito neste artigo. Aplique esta correção apenas em sistemas que tenham o problema descrito neste artigo. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afetado por este problema, recomendamos que aguarde pela próxima atualização de software que contenha esta correção.
Se a correcção estiver disponível para transferência, existirá uma secção de "Transferência de correcção disponível" na parte superior deste artigo da Base de dados de conhecimento. Se esta secção não for apresentada, contacte o Suporte ao Cliente da Microsoft para obter a correção.
Nota Caso ocorram problemas adicionais ou se for necessária a resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos de normais do suporte serão aplicados a questões de suporte adicional e problemas incluídos nesta correção específica. Para uma lista completa dos números de telefone de suporte e serviço de cliente da Microsoft ou para criar um pedido de assistência separado, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=supportNota O formulário "Transferência de correcção disponível" apresenta os idiomas nos quais a correcção está disponível. Se não visualizar o seu idioma, é porque uma correcção não está disponível para esse idioma.
Pré-requisitos
Tem de ter o Visual Studio 2005 SP 1 instalado para aplicar esta correcção.
Requisito de reinício
Não é necessário reiniciar o computador depois de aplicar esta correcção.
Informações sobre substituição da correção
Esta correcção não substitui quaisquer outras correcções.
Informações de ficheiro
A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são listadas na hora Universal Coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador Fuso horário no item data e hora no painel de controlo.
Nome do ficheiro |
Versão do ficheiro |
Tamanho do ficheiro |
Data |
Hora |
Plataforma |
---|---|---|---|---|---|
C2.dll |
14.0.50727.3080 |
2,273,280 |
19 de Novembro de 2008 |
18:52 |
x86 |
C2.dll |
14.0.50727.3080 |
7,192,576 |
19 de Novembro de 2008 |
23:25 |
IA-64 |
C2.dll |
14.0.50727.3080 |
2,490,368 |
19 de Novembro de 2008 |
23:26 |
x86 |
C2.dll |
14.0.50727.3080 |
3,600,384 |
19 de Novembro de 2008 |
23:33 |
x64 |
C2.dll |
14.0.50727.3080 |
2,203,648 |
19 de Novembro de 2008 |
23:33 |
x86 |
Solução alternativa
Para contornar este problema, utilize um dos seguintes métodos:
-
Utilize a palavra-chave volátil quando declarar as variáveis que são utilizadas nas demonstrações se .
-
Desactive a opção de optimização de velocidade. Por exemplo, substitua a opção /Ot com a opção de /Os (Favor pequeno código) . Ou, utilize a opção de /O1 em vez da opção de /O2 ou a opção de /Ox .
-
Adicione uma linha de código antes das demonstrações se na segunda comparar a operação. Por exemplo, adicione uma instrução de printf .
Estado
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".
Mais informações
Para mais informações sobre o código de um ou mais declarações podem ser executados incorrectamente quando utiliza a funcionalidade de optimização de código no Visual Studio 2005, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
925792 uma ou mais instruções de código podem ser executados incorrectamente quando utiliza a funcionalidade de optimização de código no Visual Studio 2005
Para mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:
824684 descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft