O que é uma tabela de ramificação?
Uma tabela de ramificação é um método para transferir eficientemente o controle do programa de uma parte de um programa para outra ou para um segundo programa que foi carregado dinamicamente, enviando uma ramificação de instruções ou implementando uma instrução switch. Esse método, às vezes chamado de tabela de salto, conta com um conjunto de circunstâncias ou condições para executar um salto para implementar um procedimento de acordo com uma instrução switch de um compilador C +. Algumas das principais vantagens das tabelas de ramificação são sua estrutura de código compacta e uma redução na necessidade de testar códigos de retorno individualmente ao determinar o fluxo do programa.
Na década de 1980, as tabelas de ramificação foram amplamente utilizadas na programação em linguagem assembly. Eles ainda são usados na programação de montagem para desenvolvimento de sistemas embarcados e sistemas operacionais. Desde os anos 90, as linguagens de programação do compilador também usam o funcionamento da tabela de ramificação.
As tabelas de ramificações consistem em uma lista de instruções incondicionais que, dadas as entradas, ramificam para outros destinos. A maioria dos hardwares de computador pode executar essas instruções com eficiência. Às vezes, o deslocamento - essencialmente, a distância até o destino - pode ser adicionado a um registrador de contador de programa que pode apontar para conjuntos de instruções de ramificação ou pular entre conjuntos de instruções de ramificação. Tudo o que é necessário para implementar uma tabela de ramificação é a validação do código de entrada, transformando os dados em um deslocamento e multiplicando os dados para um determinado comprimento de instrução.
A programação incorporada usa tabelas de ramificação, pois são mais eficientes em termos de memória do que o código de máquina ou ponteiros em matriz. Os sistemas de controle incorporados precisam dessa economia de memória e, embora possa custar uma pequena quantidade de desempenho durante o acesso à tabela de ramificação, qualquer chamada de função de método virtual custaria a mesma quantidade de desempenho para um funcionamento estável. O acesso limitado à CPU e a economia de memória em sistemas embarcados precisam de uma tabela de ramificação para conjuntos de funções estáticas.
As linguagens de programação do compilador geram suas próprias tabelas de ramificação quando necessário, usando as chaves de pesquisa na otimização de compiladores. Alguns programadores optam por auxiliar manualmente o compilador na geração de tabela de ramificação contextual, fornecendo ao compilador dois parâmetros condicionais de duas etapas para pesquisar as chaves. Nos anos anteriores da compilação de programas, a implementação da tabela de ramificação costumava ser os comandos "GoTo" nas linguagens do compilador Fortran. As tabelas de ramificação ainda são usadas para implementar alterações no fluxo do programa nas linguagens do compilador ou para ser um ponto de partida para sequências de instruções repetidas.