ti-enxame.com

O que é uma tabela de símbolos?

Alguém pode descrever o que é uma tabela de símbolos dentro do contexto de C e C++?

78
jdt141

Há dois significados comuns e relacionados de tabelas de símbolos aqui.

Primeiro, há a tabela de símbolos em seus arquivos de objeto. Geralmente, um compilador C ou C++ compila um único arquivo de origem em um arquivo de objeto com uma extensão .obj ou .o. Contém uma coleção de código executável e dados que o vinculador pode processar em um aplicativo ou biblioteca compartilhada. O arquivo objeto possui uma estrutura de dados chamada tabela de símbolos, que mapeia os diferentes itens no arquivo objeto para nomes que o linker possa entender. Se você chamar uma função do seu código, o compilador não colocará o endereço final da rotina no arquivo de objeto. Em vez disso, ele coloca um valor de espaço reservado no código e adiciona uma nota que informa ao vinculador para procurar a referência nas várias tabelas de símbolos de todos os arquivos de objeto que está processando e manter 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 para os usuários da biblioteca. Isso permite que o sistema faça o link de tempo de execução, resolvendo referências abertas a esses nomes no local em que a biblioteca está carregada na memória.

Se você quer aprender mais, eu sugiro o excelente livro de John Levine, "Linkers and Loaders" . link text

73
Ben Combee

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.

Isso é em geral, não apenas C [++] *. Tecnicamente, nem sempre inclui o endereço de memória direta. Depende de qual idioma, plataforma etc. o compilador está segmentando.

22
Steve Landey

No Linux, você pode usar o comando: 

nm [arquivo de objeto]

para listar a tabela de símbolos desse arquivo de objeto.

13
hdn

A tabela de símbolos é a lista de "símbolos" em um programa/unidade. Símbolos são mais freqüentemente os 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.

8
Joe Schneider

Confira a entrada Symbol Table wikipedia.

4
Allan Wind

A tabela de símbolos é uma importante estrutura de dados 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.

0
rashedcs