Ce sunt bibliotecile dinamice?

Cele mai multe dintre funcționalitățile unei aplicații sunt implementate în biblioteci de cod executabil. Atunci când o aplicație este legată cu o bibliotecă folosind un linker static, codul pe care aplicația îl folosește este copiat în fișierul executabil generat. Un linker static colectează codul sursă compilat, cunoscut sub numele de cod obiect, și codul de bibliotecă într-un singur fișier executabil care este încărcat în memorie în întregime la momentul execuției. Tipul de bibliotecă care devine parte a fișierului executabil al unei aplicații este cunoscut sub numele de bibliotecă statică. Bibliotecile statice sunt colecții sau arhive de fișiere obiect.

Când o aplicație este lansată, codul aplicației – care include codul bibliotecilor statice cu care a fost legată – este încărcat în spațiul de adrese al aplicației. Corelarea multor biblioteci statice într-o aplicație produce fișiere executabile de aplicație de mari dimensiuni. Figura 1 prezintă utilizarea memoriei unei aplicații care utilizează funcționalități implementate în biblioteci statice. Aplicațiile cu executabile mari suferă de timpi de lansare lenți și de amprente mari de memorie. De asemenea, atunci când o bibliotecă statică este actualizată, aplicațiile sale client nu beneficiază de îmbunătățirile aduse acesteia. Pentru a avea acces la funcționalitatea îmbunătățită, dezvoltatorul aplicației trebuie să coreleze fișierele obiect ale aplicației cu noua versiune a bibliotecii. Iar utilizatorii aplicațiilor ar trebui să își înlocuiască copia aplicației cu cea mai recentă versiune. Prin urmare, menținerea unei aplicații la zi cu cea mai recentă funcționalitate oferită de bibliotecile statice necesită o muncă perturbatoare atât pentru dezvoltatori, cât și pentru utilizatorii finali.

Figura 1 Aplicație care utilizează biblioteci statice

O abordare mai bună este ca o aplicație să încarce codul în spațiul său de adrese atunci când este efectiv necesar, fie în momentul lansării, fie în timpul execuției. Tipul de bibliotecă care oferă această flexibilitate se numește bibliotecă dinamică. Bibliotecile dinamice nu sunt legate static în aplicațiile client; ele nu fac parte din fișierul executabil. În schimb, bibliotecile dinamice pot fi încărcate (și legate) într-o aplicație fie atunci când aplicația este lansată, fie în timp ce rulează.

Figura 2 arată cum implementarea unor funcționalități ca biblioteci dinamice în loc de biblioteci statice reduce memoria utilizată de aplicație după lansare.

Figura 2 Aplicație care utilizează biblioteci dinamice

Utilizând biblioteci dinamice, programele pot beneficia de îmbunătățiri ale bibliotecilor pe care le utilizează în mod automat, deoarece legătura lor cu bibliotecile este dinamică, nu statică. Altfel spus, funcționalitatea aplicațiilor client poate fi îmbunătățită și extinsă fără ca dezvoltatorii de aplicații să fie nevoiți să recompileze aplicațiile. Aplicațiile scrise pentru OS X beneficiază de această caracteristică deoarece toate bibliotecile de sistem din OS X sunt biblioteci dinamice. Acesta este modul în care aplicațiile care utilizează tehnologiile Carbon sau Cocoa beneficiază de îmbunătățirile aduse la OS X.

Un alt beneficiu pe care îl oferă bibliotecile dinamice este că pot fi inițializate atunci când sunt încărcate și pot efectua sarcini de curățare atunci când aplicația client se termină în mod normal. Bibliotecile statice nu au această caracteristică. Pentru detalii, consultați Module Initializers and Finalizers.

O problemă pe care dezvoltatorii trebuie să o aibă în vedere atunci când dezvoltă biblioteci dinamice este menținerea compatibilității cu aplicațiile client pe măsură ce o bibliotecă este actualizată. Deoarece o bibliotecă poate fi actualizată fără ca dezvoltatorul aplicației-client să știe, aplicația trebuie să poată utiliza noua versiune a bibliotecii fără modificări ale codului său. În acest scop, API-ul bibliotecii nu trebuie să se schimbe. Cu toate acestea, există momente în care îmbunătățirile necesită modificări ale API-ului. În acest caz, versiunea anterioară a bibliotecii trebuie să rămână în calculatorul utilizatorului pentru ca aplicația client să funcționeze corect. Dynamic Library Design Guidelines explorează subiectul gestionării compatibilității cu aplicațiile client pe măsură ce o bibliotecă dinamică evoluează.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.