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.
É 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.