Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

Domanda: Tabella dei simboli


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 3 risposta/e

#1
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Salve ragazzi, vi pongo questo quesito perchè la cosa non mi è particolarmente chiara:
quando si dice che per i simboli esterni la tabella dei simboli contiene il nome e gli indirizzi delle istruzioni che li riferiscono, cosa si vuole intendere? Per i nomi ok, ma questi indirizzi cosa sono? Gli indirizzi di ogni punto del codice oggetto in cui è presente il simbolo? O cosa? :huh:



#2
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Allora, un simbolo esterno sarebbe una funzione non definita nel file ma da qualche altra parte giusto? l'indirizzo che è contenuto nella tabella non è altro che l'indirizzo dove è presente la definizione del simbolo nient'altro. :P
Almeno è così che l'ho interpretata io e credo sia corretto, non ha molto senso tenere gli indirizzi di tutte le "occorrenze" del simbolo, a noi interessa la definizione! no?^_^
Immagine inviata

#3
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Ho chiesto al prof Percannella la settimana scorsa... la tabella dei simboli salva per i simboli esterni (quelli definiti altrove, ma usati nel programma) tutti gli indirizzi del codice ai quali si trova tale simbolo non risolto allo scopo di facilitare il compito del linker che si dovrà preoccupare solamente di copiare a tali indirizzi il codice oggetto compilato da un'altra parte dal compilatore che corrisponde alle definizioni di tale simbolo (non è detto che sia una funzione, può essere anche un tipo definito dall'utente o anche un alias di un qualsiasi token realizzato tramite "typedef").

Esempio:
Il compilatore trova durante la creazione dell'oggetto una "printf", copia nella tabella dei simboli il suo nome e l'indirizzo al quale si trova (nel codice), continua la sua compilazione e trova qualche riga più avanti un'altra "printf", il nome sarà già salvato per cui non c'è motivo di salvarlo di nuovo e salverà solo il secondo indirizzo... e così via...
Ovviamente bisogna accertarsi di aver incluso "stdio.h" altrimenti l'errore è già di compilazione perchè il compilatore non trova il suo prototipo esplicitato dal preprocessore.
Le librerie standard (files con estensione .a) dovrebbero essere già compilate per cui nella tabella dei simboli sono inserite per tali librerie già tutti i nomi e l'indirizzo di definizione, il linker non dovrà fare altro che eseguire il collegamento seguendo gli indirizzi e copiando l'oggetto del simbolo non risolto nei punti precisi del codice.

#4
Gianluigi

Gianluigi

    Advanced Member

  • Utente
  • StellaStellaStella
  • 74 Messaggi:
Io invece non ho capito bene una cosa, la tabella dei simboli quindi viene memorizzata dal compilatore nell'area codice? Cioè quella parte del WS (work-space) che viene prima dell'area dati?

Anzi, leggendo una slide credo di aver capito che la tabella dei simboli va nell'area statica (dove sono le variabili globali)
è giusto? :mirror:




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi