Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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çã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. |
Observação