¿Alguien puede describir qué es una tabla de símbolos dentro del contexto de C y C++?¿Qué es una tabla de símbolos?
Respuesta
Aquí hay dos significados comunes y relacionados de las tablas de símbolos.
En primer lugar, está la tabla de símbolos en sus archivos de objeto. Por lo general, un compilador C o C++ compila un único archivo fuente en un archivo objeto con una extensión .obj o .o. Esto contiene una colección de código ejecutable y datos que el enlazador puede procesar en una aplicación en funcionamiento o una biblioteca compartida. El archivo objeto tiene una estructura de datos llamada tabla de símbolos que mapea los diferentes elementos en el archivo objeto con nombres que el vinculador puede comprender. Si llama a una función desde su código, el compilador no pone la dirección final de la rutina en el archivo del objeto. En su lugar, pone un valor de marcador en el código y agrega una nota que le dice al vinculador que busque la referencia en las diversas tablas de símbolos de todos los archivos de objeto que está procesando y pegue allí la ubicación final.
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 nombrar todas las funciones y elementos de datos que son visibles para los usuarios de la biblioteca. Esto permite que el sistema realice un enlace en tiempo de ejecución, resolviendo las referencias abiertas a esos nombres en 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
En pocas palabras, es la asignación del nombre 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 del idioma, la plataforma, etc. a los que apunta el compilador.
creo, se fue muy importante que mencione el contenido de la dirección diciendo "no siempre incluye la dirección de memoria directa". – zgulser
Revisa la entrada de la wikipedia Symbol Table.
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 de memoria o funciones.
En Linux, puede utilizar el comando:
nm [fichero objeto]
a la lista de la tabla de símbolos de ese archivo objeto.
Tabla de símbolos es una estructura de datos importante creada y mantenida por los compiladores con el fin de almacenar información acerca de la ocurrencia de diversas entidades, tales como nombres de variables, nombres de funciones, objetos, clases, interfaces, etc.
Los enlazadores y ensambladores también tratan con tablas de símbolos (a menudo más simples que las del compilador). –
- 1. Cómo hacer una tabla de símbolos
- 2. Tabla de símbolos en Python
- 3. ¿Qué es una tabla de saltos?
- 4. ¿Qué es una tabla de búsqueda?
- 5. la tabla de símbolos: borrar entradas
- 6. Devolución de una biblioteca compartida tabla de símbolos
- 7. ¿Qué es la tabla de símbolos y cómo se integra en el ejecutable?
- 8. MySQL: ¿qué es una tabla temporal?
- 9. ¿Qué es más eficiente: una sola tabla larga o una tabla distribuida? ¿y por qué?
- 10. ¿Qué es la tabla android_metadata?
- 11. ¿No hay tabla de símbolos en Go? nuevo lenguaje
- 12. ¿Qué es una tabla Parent y una tabla Child en la base de datos?
- 13. Tabla de símbolos del kernel mapeada en el espacio de direcciones virtuales - ¿por qué?
- 14. ¿Qué tabla es exactamente la tabla "izquierda" y la tabla "derecha" en una declaración JOIN (SQL)?
- 15. ¿Por qué Ruby expone símbolos?
- 16. ¿Cómo se distingue una tabla de símbolos de una variable hash regular?
- 17. ¿Es válida una tabla html dentro de una tabla?
- 18. ¿Cuál es la diferencia entre símbolos minoristas y símbolos marcados?
- 19. ¿Qué significa cada columna de la tabla de símbolos de objdump?
- 20. ¿Qué es un prefijo de tabla?
- 21. Accediendo a la tabla de símbolos activa en Common Lisp
- 22. ¿Cómo se accede a la tabla de símbolos en Ruby?
- 23. ¿Por qué hay varios archivos c en la tabla de símbolos de% main ::?
- 24. ¿Qué significan estos símbolos de git?
- 25. ¿Cómo se relaciona una tabla de símbolos con las cadenas estáticas y el alcance?
- 26. Crear una matriz de símbolos
- 27. ¿Qué es el T-SQL para normalizar una tabla existente?
- 28. Acceso a la tabla de símbolos ELF en C
- 29. ¿Qué tan grande es demasiado grande para una tabla MySQL?
- 30. Creando la tabla de símbolos para gdb usando cmake
Hola Ben, en el segundo caso, ¿te refieres a la tabla de exportación? Es decir, ¿la tabla de exportación es un caso especial de la tabla de símbolos? ¿O son estos conceptos no relacionados? – Pooven
Hola. Creo que no está en ningún archivo objeto, sino que se refiere a ellos. En segundo lugar, ¿podría explicar un poco más lo que quiso decir con "ubicación final"? Dirección física o dirección relativa finalizada en el código fuente. – zgulser
¿Es el segundo que menciona una referencia a la rama o tabla de llamadas? –