¿Qué es una tabla de símbolos?


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

Author: Pooven, 2008-09-16

6 answers

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

Primero, está la tabla de símbolos en sus archivos objeto. Por lo general, un compilador de C o C++ compila un solo archivo fuente en un archivo objeto con a .obj or .o extensión. Contiene una colección de código ejecutable y datos que el enlazador puede procesar en una aplicación de trabajo o biblioteca compartida. El archivo objeto tiene una estructura de datos llamada tabla de símbolos que asigna los diferentes elementos del archivo objeto a nombres que el enlazador puede entender. Si llamas a una función desde tu código, el compilador no pone 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 enlazador que busque la referencia en las diversas tablas de símbolos de todos los archivos objeto que está procesando y pegue la ubicación final allí.

En segundo lugar, también está la tabla de símbolos en una biblioteca compartida o DLL. Esto es producido por el enlazador y sirve para asigne un nombre a todas las funciones y elementos de datos visibles para los usuarios de la biblioteca. Esto permite al sistema hacer enlaces en tiempo de ejecución, resolviendo las referencias abiertas a esos nombres a la ubicación donde se carga la biblioteca en la memoria.

Si quieres aprender más, te sugiero el excelente libro de John Levine "Linkers and Loaders". texto de enlace

 70
Author: Ben Combee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 03:28:59

Brevemente, es la asignación del nombre que asigna a una variable a su dirección en memoria, incluidos metadatos como tipo, alcance y 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. el compilador está apuntando.

 22
Author: Steve Landey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 03:16:21

En Linux, puede usar el comando:

Nm[archivo objeto]

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

 13
Author: root,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-28 16:44:44

La tabla de símbolos es la lista de "símbolos" en un programa/unidad. Los símbolos suelen ser 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
Author: Joe Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 03:26:42

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

 4
Author: Allan Wind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-15 12:37:21

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
Author: rashedcs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-01 13:41:11