CORRECÇÃO: Quando executa uma aplicação que é criada utilizando a opção do compilador /Ot no Microsoft Visual Studio 2005 Service Pack 1 (SP1), algumas instruções "se" podem ser executados incorrectamente

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

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×