Alguém pode descrever o que é uma tabela de símbolos no contexto de C e C ++?
Respostas:
Existem dois significados comuns e relacionados de tabelas de símbolos aqui.
Primeiro, há a tabela de símbolos em seus arquivos de objeto. Normalmente, um compilador C ou C ++ compila um único arquivo de origem em um arquivo de objeto com uma extensão .obj ou .o. Ele contém uma coleção de código executável e dados que o vinculador pode processar em um aplicativo de trabalho ou biblioteca compartilhada. O arquivo de objeto possui uma estrutura de dados chamada tabela de símbolos que mapeia os diferentes itens no arquivo de objeto para nomes que o vinculador pode entender. Se você chamar uma função do seu código, o compilador não colocará o endereço final da rotina no arquivo-objeto. Em vez disso, ele coloca um valor de espaço reservado no código e adiciona uma nota que diz ao vinculador para procurar a referência nas várias tabelas de símbolos de todos os arquivos de objeto que está processando e colocar o local final lá.
Em segundo lugar, há também a tabela de símbolos em uma biblioteca compartilhada ou DLL. Isso é produzido pelo vinculador e serve para nomear todas as funções e itens de dados que são visíveis aos usuários da biblioteca. Isso permite que o sistema faça a vinculação em tempo de execução, resolvendo referências abertas a esses nomes para o local onde a biblioteca está carregada na memória.
Se você quiser aprender mais, sugiro o excelente livro de John Levine "Linkers and Loaders". Texto do link
Resumidamente, é o mapeamento do nome que você atribui a uma variável ao seu endereço na memória, incluindo metadados como tipo, escopo e tamanho. É usado pelo compilador.
Em geral, não apenas C [++] *. Tecnicamente, nem sempre inclui o endereço de memória direto. Depende de qual idioma, plataforma, etc. o compilador está almejando.
No Linux, você pode usar o comando:
nm [arquivo objeto]
para listar a tabela de símbolos desse arquivo de objeto. A partir desta impressão, você pode decifrar os símbolos do linker em uso a partir de seus nomes mutilados .
A tabela de símbolos é a lista de "símbolos" em um programa / unidade. Os símbolos são geralmente nomes de variáveis ou funções. A tabela de símbolos pode ser usada para determinar onde as variáveis ou funções da memória serão localizadas.
Verifique a entrada da Wikipedia da Tabela de Símbolos .
A tabela de símbolos é uma estrutura de dados importante criada e mantida por compiladores para armazenar informações sobre a ocorrência de várias entidades, como nomes de variáveis, nomes de funções, objetos, classes, interfaces, etc.