Definição – O que significa Atribuição de Registros?
A alocação de registro refere-se à prática de atribuir variáveis aos registros, bem como lidar com a transferência de dados para dentro e fora dos registros. A alocação de registro pode ocorrer:
- Em um bloco básico, conhecido como alocação de registro local
- Sobre uma função ou procedimento inteiro, conhecido como alocação de registro global
- Sobre os limites da função percorridos por meio de um gráfico de chamadas, conhecido como alocação de registro entre procedimentos
Definirtec explica a alocação de registros
Durante o curso da compilação, o compilador deve determinar a maneira como as variáveis são alocadas para um pequeno intervalo específico de registradores. Algumas das variáveis podem não estar em uso ou podem estar “ativas” simultaneamente. Isso leva à atribuição de alguns registradores a várias variáveis. No entanto, duas variáveis ativas simultâneas não podem ser alocadas exatamente no mesmo registro sem corromper o valor.
Variáveis que não podem ser alocadas a alguns registradores precisam ser armazenadas na RAM e devem ser carregadas dentro e fora para cada leitura e escrita, respectivamente, um procedimento conhecido como spilling. Acessar registradores é muito mais rápido do que acessar RAM. Além disso, acelera o tempo de execução do programa compilado; portanto, compiladores eficientes visam atribuir tantas variáveis aos registradores quanto possível.
Geralmente, a maioria dos alocadores de registro atribuem cada variável à memória principal ou a um registro da unidade de processamento central (CPU). A velocidade é o principal benefício ao usar um registro. Os computadores apresentam uma gama finita de registros, o que significa que nem todas as variáveis disponíveis podem ser atribuídas a registros. O processo de transferência de uma variável de um registro para a memória é conhecido como derramamento, enquanto o procedimento reverso de mover uma variável da memória para um registro é conhecido como preenchimento. A alocação de registro inteligente é uma etapa crucial para qualquer compilador.
Existem dois tipos de alocação de registro:
- Alocação de registro local: Este é um processo de alocação de um bloco básico (ou hiper ou super bloco) de cada vez. A alocação de registro local aumenta a velocidade.
- Alocação de registro global: Se a utilização do registro for pobre usando a alocação local, é importante fazer uso da alocação de registro global. Na alocação de registro global simples, os valores mais ativos são alocados em cada loop interno. A alocação de registro global completa usa um procedimento para identificar faixas vivas em um gráfico de fluxo de controle, atribuir faixas vivas e também dividir faixas conforme necessário.