Quão ruim pode ser feito usando variables ​​de registro em C ++

Acabei de saber que podemos usar registradores, explicitamente em programas C ++. Eu me pergunto o que se eu declarar e usar todos os registradores disponíveis em um único programa C + + e executá-lo por um período considerável de tempo. Quão mal meu sistema se comportará e quais medidas (se houver) serão tomadas pelo sistema operacional para sair da situação.

A palavra-chave register indica ao compilador que a variável não precisa ser endereçável na memory principal. Assim, o compilador pode ter certeza de que não há pointers para o valor e otimizar adequadamente.

  • Um equívoco comum: a palavra-chave registrada
  • palavra-chave registrada (consulte a parte específica não-Microsoft)
  • “registrar” palavra-chave em C?

É improvável que o uso excessivo da palavra-chave de registro tenha sérios impactos negativos nos sistemas modernos. Cada encadeamento mantém seus próprios valores de registro durante a execução, e seu uso de registro não terá nenhum impacto direto em outros encadeamentos. O compilador rejeitará ou ignorará o uso do registro que não pode resultar em um programa viável. O uso inadequado de registros irá no máximo reduzir o desempenho e o sistema operacional não executará nenhuma ação especial.

O compilador simplesmente ignorará a palavra-chave register , assim você não ficará sem registradores. Pode muito bem ignorá-lo de qualquer maneira – compiladores são tipicamente muito melhores em alocação de registros do que humanos.

Apenas um número específico de Registradores está disponível para o seu programa C ++.

Além disso, é apenas uma sugestão para o compilador. Na maioria dos casos, compiladores podem fazer essa otimização sozinhos, de modo que não há realmente muito uso do uso da palavra-chave register porque os compiladores podem ou não seguir a sugestão.

Portanto, a única coisa que a palavra-chave register faz com os compiladores modernos é impedir que você use & para obter o endereço da variável.

Para citar Herb Sutter sobre isso:
Nunca escreva registrador. É exatamente tão significativo quanto o espaço em branco

A palavra-chave register é apenas uma sugestão para o compilador e pode ser ignorada. Deixe o compilador fazer a otimização para você.

A palavra-chave register é apenas uma sugestão educada para o compilador que você acha que esta variável será fortemente usada e poderia ser bonita – por favor, apenas mantenha-a em um registrador. O compilador está livre para ignorar essa sugestão e, na verdade, geralmente o fará em um ambiente moderno.

register é basicamente um remanescente vestigial dos antigos compiladores C, ineficientes e grosseiros que estavam disponíveis desde quando. (Os mesmos compiladores que levaram a coisas como o execrável Duff’s Device e outras monstruosidades, na verdade.) Os compiladores modernos são muito mais capazes do que você de rastrear quais variables ​​devem ser colocadas em quais registradores em quais pontos da execução. Eles, assim, educadamente ignoram você sem dizer uma palavra.

Als postou um link para o artigo de Herb Sutter sobre palavras-chave. Concordo com Sutter que nunca se deve usar o registrador. Eu não concordo com ele se o registro é sem sentido.

É pior que sem sentido.

Eu vi o código onde uma variável qualificada com registro é usada mais tarde com “&”. Código com dezenas e dezenas de variables ​​qualificadas com registro. E o último doozy, “registre volátil foo”;

Nunca use “register”.

Todos os registradores da CPU estão à disposição de seu programa, então não há nada excepcional em usar todos eles. OS nem vai perceber.