Supponiamo che io abbia una libreria condivisa con questa funzione dove "i" è una variabile globale.Come sono collegate le variabili globali nelle librerie condivise?
Quando chiamo questa funzione da più processi, il valore di "i" in ogni processo è indipendente dagli altri
Questo comportamento è abbastanza probabile.
Mi stavo chiedendo come viene solitamente implementato questo comportamento dal linker? Dalla mia comprensione il codice è condiviso tra i processi, quindi la variabile deve avere lo stesso indirizzo virtuale in tutti gli spazi di indirizzi di ogni programma che utilizza questa libreria. Quella condizione sembra abbastanza difficile da realizzare per me quindi credo che mi manca qualcosa qui e si fa in modo diverso.
Posso ottenere informazioni più dettagliate su questo argomento?
** Codice ** è condiviso, non ** dati. ** Il linker dinamico presumibilmente crea una nuova copia della variabile per ogni processo, ma non crea copie del segmento di testo (codice). –
@ H2CO3 Ne sono ben consapevole. Comunque sto chiedendo i dettagli del processo di collegamento. –
Bene, se hai bisogno di maggiori dettagli, penso che dovresti dare un'occhiata a un'implementazione reale. Il linker dinamico in Linux e quello in Darwin (BSD/OS X/iOS) sono opensource. –