Partilhar via


volátil (C++)

Um qualificador do tipo que você pode usar para declarar um objeto que pode ser modificado no programa por hardware.

volatile declarator ;

Comentários

Você pode usar a opção do compilador de /volatile para alterar como o compilador interpreta esta palavra-chave.

O Visual Studio constrói a palavra-chave de volatile de maneira diferente dependendo da arquitetura de destino.Para o BRAÇO, se nenhuma opção de compilador /volatile for especificada, o compilador executa como se /volatile:iso foi especificado.Para diferentes arquiteturas de BRAÇO, se nenhuma opção de compilador /volatile for especificada, o compilador executa como se /volatile:ms foi especificado; como consequência, porque diferentes arquiteturas de BRAÇO é altamente recomendável que você especifica /volatile:iso, e usamos primitivos de sincronização e intrinsics explícitos de compilador quando você está tratando a memória que é compartilhado entre threads.

Você pode usar o qualificador de volatile para fornecer acesso aos locais de memória que são usados por processos como manipuladores assíncronos de interrupção.

Quando volatile é usado em uma variável que também tem a palavra-chave de __restrict , volatile tem precedência.

Se um membro de struct é marcado como volatile, então volatile é propagado para a estrutura inteira.Se uma estrutura não tem um tamanho que pode ser copiado na arquitetura atual usando uma instrução, volatile completamente pode ser perdidas no framework.

A palavra-chave de volatile pode não ter nenhum efeito sobre um campo se uma das seguintes condições forem verdadeiras:

  • O comprimento do campo temporário excede o tamanho máximo que pode ser copiado na arquitetura atual usando uma instrução.

  • O comprimento de structrecipiente mais externo — ou seja um membro de structpossivelmente aninhado — excede o tamanho máximo que pode ser copiado na arquitetura atual usando uma instrução.

Embora o processador não reordene acessa de memória un - armazenável em cache, variáveis un - cacheable devem ser marcados como volatile para garantir que o compilador não reordena o acessa de memória.

Objetos que são declarados como volatile não é usado em determinadas otimizações porque seus valores podem alterar a qualquer momento.O sistema sempre ler o valor atual de um objeto temporário quando for solicitado, se uma declaração anterior solicitou um valor do mesmo objeto.Além disso, o valor do objeto é gravado imediatamente na atribuição.

ISO compatível

Se você estiver familiarizado com a palavra-chave de Volátil C# , ou o familiarizado com o comportamento de volatile em versões anteriores do Visual C++, esteja ciente que a palavra-chave de volatile padrão de C++11 ISO é diferente e é suportado no Visual Studio quando a opção de compilador /volatile: ISO é especificado.(Para o BRAÇO, especificado por padrão).A palavra-chave de volatile no código de padrão de C++11 ISO deve ser usada somente para acesso de hardware; não use o para comunicação de inter- segmento.Para comunicação de inter- segmento, use mecanismos como std::atomic<T> de Biblioteca padrão do modelo C++.

Específico da Microsoft

Quando a opção de compilador /volatile:ms é usado - por padrão quando as diferentes arquiteturas de BRAÇO são direcionados - o compilador gera código adicional para manter classificação entre referências a objetos voláteis além de ordenação de aplicativos para referências a outros objetos globais.Em particular:

  • Uma gravação a um objeto temporário (também conhecido como gravar temporária) tem a semântica de versão; ou seja, uma referência a um objeto global ou estático que ocorre antes que uma gravação a um objeto temporário em sequência de declaração ocorrer antes que temporário gravar no binária compilada.

  • Uma leitura de um objeto temporário (também conhecido como o volátil ler) tem adquirir a semântica; ou seja, uma referência a um objeto global ou estático que ocorrência de uma após leitura de memória temporária em sequência de declaração ocorrerá em seguida o volátil lê o binária compilada.

Isso permite que objetos a serem voláteis usados para bloqueios e versões de memória em aplicativos multissegmentados.

ObservaçãoObservação

Quando depende da garantia avançado que é fornecida quando a opção de compilador /volatile:ms for usada, o código não é portátil.

Consulte também

Referência

Palavras-chave C++

Const (C++)

Ponteiros const e volátil