2012-04-03 4 views
7

So cosa fa un caricatore dinamico. Carica i programmi come e quando richiesto dall'applicazione in fase di esecuzione, riducendo così al minimo la stampa del foot memory. Ma davvero non capisco cosa sia questo linker dinamico? E quali sono i suoi vantaggi? Ho letto molte cose online ma stanno parlando in termini astratti.Qual è la differenza tra linker dinamico e caricatore dinamico?

Qualcuno può spiegarmi con alcuni semplici esempi?

+0

http://stackoverflow.com/questions/311882/what-do-static-linked-and-dynamically-linked-mean/311889#311889 – Vijay

+0

@peter grazie! ha aiutato. –

risposta

6

Sono davvero due termini per la stessa cosa.

Nel mondo Unix, il termine linker dinamico viene utilizzato per indicare il componente del sistema operativo che collega le librerie dinamiche in fase di esecuzione, mentre un caricatore sulla maggior parte degli altri sistemi esegue sia il caricamento che il collegamento di librerie dinamiche.

Poiché il caricamento di librerie in sistemi Unix è eseguito da un componente separato (ld.so più spesso), un linker dinamico viene considerato diverso dal programma di caricamento. I compilatori di solito inseriscono alcuni codici stub all'inizio del file eseguibile per caricare ld.so e ld.so continueranno a caricare il resto delle librerie dipendenti prima che venga invocato il numero main. Mentre il caricamento del programma viene eseguito in kernelspace, il collegamento delle librerie dinamiche avviene di solito in userspace.

Questo è diverso da Windows, in cui entrambi i programmi caricano e collegano le librerie dinamiche in modalità kernel.