Nel contesto dei compilatori, l'associazione è la fase in cui i riferimenti di indirizzo vengono modificati in effettivi indirizzi assoluti.
Quando il programma è compilato, l'indirizzo di ciascun simbolo (variabile, funzione) viene memorizzato nella tabella dei simboli, ad esempio come offset relativo dall'inizio del modulo dell'oggetto, insieme al nome del simbolo. Il nome del simbolo è necessario poiché i simboli possono essere chiamati da un altro modulo oggetto.
Quando il programma è collegato, i moduli oggetto vengono combinati in un singolo file di programma ei nomi dei simboli non sono più necessari. Se il programma è collegato a un indirizzo assoluto noto, tutti i riferimenti di indirizzo possono essere associati a indirizzi in indirizzi assoluti già in questa fase.
Tuttavia, in workstation come PC: s, il programma può essere caricato su qualsiasi indirizzo, quindi l'indirizzo non è noto al momento del collegamento. Pertanto, ulteriori informazioni sulla ricollocazione vengono memorizzate nel file di programma in modo che il caricatore possa associare gli indirizzi al momento del caricamento.
Il collegamento viene eseguito al momento del caricamento utilizzando le informazioni di trasferimento. Quando l'indirizzo in cui verrà eseguito il programma è noto, il caricatore sostituisce gli indirizzi relativi con gli indirizzi assoluti utilizzando le informazioni di trasferimento che indicano dove devono essere eseguite le modifiche nel codice.
Per oggetti/variabili dinamici, il binding può essere eseguito in runtime. (Penso che questo sia quello che viene solitamente chiamato late binding.)
Di solito non è necessario preoccuparsi troppo del binding, almeno non quando si utilizza il binding anticipato. (Tuttavia, il binding in fase di esecuzione può avere un impatto negativo sulle prestazioni e sulla sicurezza.)
Avrebbe anche senso notare ciò che è vincolante rispetto a ciò che è il collegamento. Per esempio. Ada usa passaggi separati per quelli, mentre C li fonde/li confonde. – ndim