it-swarm-es.tech

¿Qué es una tabla de símbolos?

¿Puede alguien describir qué es una tabla de símbolos dentro del contexto de C y C++?

78
jdt141

Hay dos significados comunes y relacionados de las tablas de símbolos aquí.

Primero, está la tabla de símbolos en tus archivos de objetos. Generalmente, un compilador de C o C++ compila un archivo de origen único en un archivo de objeto con una extensión .obj o .o. Este contiene una colección de código ejecutable y datos que el vinculador puede procesar en una aplicación que funcione o en una biblioteca compartida. El archivo de objeto tiene una estructura de datos llamada tabla de símbolos que asigna los diferentes elementos del archivo de objeto a nombres que el vinculador puede comprender. Si llama a una función desde su código, el compilador no coloca la dirección final de la rutina en el archivo objeto. En su lugar, coloca un valor de marcador de posición en el código y agrega una nota que le dice al vinculador que busque la referencia en las distintas tablas de símbolos de todos los archivos de objetos que está procesando y que pegue la ubicación final allí.

En segundo lugar, también está la tabla de símbolos en una biblioteca compartida o DLL. Esto lo produce el enlazador y sirve para nombrar todas las funciones y elementos de datos que son visibles para los usuarios de la biblioteca. Esto permite que el sistema realice la vinculación en tiempo de ejecución, resolviendo las referencias abiertas de esos nombres a la ubicación donde se carga la biblioteca en la memoria.

Si desea obtener más información, sugiero el excelente libro de John Levine "Enlazadores y cargadores" . link text

73
Ben Combee

En resumen, es la asignación del nombre al que asigna una variable a su dirección en la memoria, incluidos los metadatos, como el tipo, el alcance y el tamaño. Es utilizado por el compilador.

Eso es en general, no solo C [++] *. Técnicamente, no siempre incluye la dirección de memoria directa. Depende de qué idioma, plataforma, etc. está dirigido el compilador.

23
Steve Landey

En Linux, puedes usar el comando:

nm [archivo objeto]

para listar la tabla de símbolos de ese archivo objeto.

13
user188276

La tabla de símbolos es la lista de "símbolos" en un programa/unidad. Los símbolos son a menudo los nombres de variables o funciones. La tabla de símbolos se puede usar para determinar dónde se ubicarán las variables o funciones de la memoria.

8
Joe Schneider

Echa un vistazo a la Tabla de símbolos wikipedia entrada.

4
Allan Wind

La tabla de símbolos es una estructura de datos importante creada y mantenida por los compiladores para almacenar información sobre la ocurrencia de varias entidades, como nombres de variables, nombres de funciones, objetos, clases, interfaces, etc.

0
rashedcs