Dynamic-link library: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m r2.7.1+) (Bot: Modifico: uk:Dynamic-link library |
Nessun oggetto della modifica |
||
Riga 1:
{{Nota disambigua|altre voci che possono riferirsi alla stessa combinazione di 3 caratteri|[[DLL (disambigua)]]|redirect=DLL}}
In [[informatica]], una '''''dynamic-link library''''' (termine [[lingua inglese|inglese]], tradotto in [[lingua italiana|italiano]] con '''libreria a collegamento dinamico''') è una [[libreria software]] che viene caricata dinamicamente in fase di esecuzione, invece di essere [[Linguaggio di programmazione#Il collegamento (linking)|collegata]] staticamente
== Vantaggi e svantaggi ==
La separazione del codice in librerie a collegamento dinamico permette di
Un altro vantaggio è la possibilità di aggiornare un programma modificando solo le DLL: inserendo una versione diversa della DLL, che contiene ad esempio dei ''[[bug fix]]'', tutti i programmi che la usano saranno automaticamente "aggiornati" senza bisogno di essere ricompilati.
Il principale svantaggio è legato al fatto che una nuova versione di una DLL potrebbe effettuare dei cosiddetti ''breaking changes'', in modo volontario o, inconsapevolmente, a causa di bug nella nuova versione. Un breaking change è una
In alcuni sistemi operativi, tipicamente [[Unix]] e [[Unix-like]], è possibile far convivere versioni diverse, fra loro incompatibili, di una stessa libreria, purché
I [[sistema operativo|sistemi operativi]] di tipo Windows mantengono un [[Backup|back up]] delle DLL di sistema in un'apposita memoria [[cache]], nella [[cartella]] nascosta system32/dllcache. Nella cartella system32/dll sono invece memorizzate le librerie in uso.
Riga 22:
Una libreria a collegamento dinamico è a tutti gli effetti un codice eseguibile. Ogni [[file eseguibile]] (EXE o DLL) dispone di un [[punto d'ingresso]] (''entry point'') invocato dal sistema operativo subito dopo il caricamento. Per una DLL il punto d'ingresso è mappato per convenzione sulla [[funzione (informatica)|funzione]] <tt>DllMain</tt> (a discrezione, comunque, del [[compilatore]]).
La funzione <tt>DllMain</tt>
A differenza di un file EXE, la DLL deve uscire dall'entry point non appena ha terminato le inizializzazioni necessarie.
Riga 28:
=== Struttura ===
Per semplificare,
=== Caricamento ===
Le librerie dinamiche vengono caricate dal sistema operativo all'interno dello [[spazio di memoria]] del processo che le ha richieste. In questo modo l'accesso al codice della DLL avrà prestazioni quasi equivalenti a quelle del codice dell'applicazione stessa o del codice delle librerie statiche (
Per evitare che il codice dell'applicazione e quello della DLL occupino la stessa posizione in memoria, il [[linker]] dovrà predisporre la DLL per la [[rilocazione]]. In pratica, il sistema operativo determina un'area di memoria disponibile e rimappa ogni riferimento alla memoria contenuto nel codice della DLL. Siccome quest'operazione richiede tempo, ogni DLL dispone di un proprio ''indirizzo di base'' ideale: la rilocazione sarà necessaria solo se a questo indirizzo predeterminato è già stata mappata una precedente DLL. Per specificare l'indirizzo ideale si può usare una regola empirica, basata sulla lettera iniziale del nome della DLL, secondo la seguente tabella:
Riga 60:
=== Collegamento ad un eseguibile ===
Il collegamento di un eseguibile
Il collegamento può essere di due tipi: esplicito o implicito.
|