Mitä ovat dynaamiset kirjastot?
Suurin osa sovelluksen toiminnoista on toteutettu suoritettavan koodin kirjastoissa. Kun sovellus linkitetään kirjaston kanssa staattisella linkittäjällä, sovelluksen käyttämä koodi kopioidaan luotuun suoritettavaan tiedostoon. Staattinen linkittäjä kokoaa käännetyn lähdekoodin, niin sanotun objektikoodin, ja kirjastokoodin yhdeksi suoritettavaksi tiedostoksi, joka ladataan kokonaisuudessaan muistiin suoritusaikana. Sellaista kirjastoa, joka tulee osaksi sovelluksen suoritettavaa tiedostoa, kutsutaan staattiseksi kirjastoksi. Staattiset kirjastot ovat objektitiedostojen kokoelmia tai arkistoja.
Kun sovellus käynnistetään, sovelluksen koodi – joka sisältää sen kanssa linkitettyjen staattisten kirjastojen koodin – ladataan sovelluksen osoiteavaruuteen. Monien staattisten kirjastojen linkittäminen sovellukseen tuottaa suuria sovelluksen suoritettavia tiedostoja. Kuvassa 1 esitetään sellaisen sovelluksen muistinkäyttö, joka käyttää staattisissa kirjastoissa toteutettuja toimintoja. Sovellukset, joiden suoritettavat tiedostot ovat suuria, kärsivät hitaista käynnistysajoista ja suurista muistijäljistä. Kun staattista kirjastoa päivitetään, sen asiakassovellukset eivät myöskään hyödy siihen tehdyistä parannuksista. Parannetun toiminnallisuuden käyttämiseksi sovelluksen kehittäjän on linkitettävä sovelluksen objektitiedostot kirjaston uuden version kanssa. Sovellusten käyttäjien on vaihdettava sovelluksen kopio uusimpaan versioon. Näin ollen sovelluksen pitäminen ajan tasalla staattisten kirjastojen tarjoaman uusimman toiminnallisuuden kanssa vaatii häiritsevää työtä sekä kehittäjiltä että loppukäyttäjiltä.
Parempi lähestymistapa on se, että sovellus lataa koodia osoiteavaruuteensa silloin, kun sitä oikeasti tarvitaan, joko käynnistyshetkellä tai ajon aikana. Kirjastotyyppiä, joka tarjoaa tämän joustavuuden, kutsutaan dynaamiseksi kirjastoksi. Dynaamisia kirjastoja ei linkitetä staattisesti asiakassovelluksiin; ne eivät tule osaksi suoritettavaa tiedostoa. Sen sijaan dynaamiset kirjastot voidaan ladata (ja linkittää) sovellukseen joko sovellusta käynnistettäessä tai sen suorituksen aikana.
Kuvassa 2 näytetään, miten joidenkin toimintojen toteuttaminen dynaamisina kirjastoina staattisten kirjastojen sijaan vähentää sovelluksen käyttämää muistia käynnistyksen jälkeen.