Cel mai bun răspuns
Înainte de a trece la diferență, să vedem procesul de legare pe scurt.
De ce linker?
Când scrieți un cod C (sau orice altă limbă), acesta este stocat în format .c.
#include
int main(){
printf("quora");
return 0;
}
Acum acest program trece prin faza de compilare în care acest codul sursă este convertit în instrucțiuni în limba mașinii. Acestea sunt fișierele obiect stocate în format .o sau .obj. Dacă avem 2 fișiere separate, vom avea 2 fișiere obi separate. Aceste fișiere sunt doar traducerea programului dvs., pentru a rula aceste programe, trebuie să generăm un executabil pe care sistemul de operare îl poate rula. În acest scop, folosim linker.
Acum linker creează un singur fișier executabil din mai multe fișiere obiect. Acum, în programul nostru C am folosit funcția main (), dar unde este definiția sa. Domeniul de aplicare al compilatorului este limitat la un singur fișier, astfel încât să nu caute referințe care ar fi putut fi declarate și definite în alte fișiere.
Linker caută mai multe fișiere pentru această definiție a funcției „main ()” și le leagă. Acum venim la întrebarea dvs.
Conectare statică vs conectare dinamică:
- În legare statică , toate modulele bibliotecii sunt copiate în imaginea executabilă finală. Când programul este încărcat, sistemul de operare plasează în memorie un singur fișier care conține atât codul sursă, cât și bibliotecile de referință. În timp ce în legătură dinamică numai numele bibliotecilor externe sau partajate sunt plasate în memorie. Conectarea dinamică permite multor programe să folosească o singură copie a modulului executabil.
- Conectarea statică se face de către linkeri în pasul final al compilării, întrucât legătura dinamică se face în timpul rulării de către sistemul de operare.
- Fișiere legate static consumă mai mult disc și memorie deoarece toate modulele sunt deja conectate. Dar în Conectare dinamică, este stocată o singură copie a modulului de referință care este utilizată de multe programe economisind astfel spațiu de memorie și disc. În Conectare statică, dacă programul sursă externă este modificat, atunci acestea trebuie recompilate și reconectate. Dar în cazul linking dinamic trebuie să fie actualizat și recompilat un singur modul.
- Programele conectate static sunt mai rapide decât omologul lor dinamic.
- Deoarece fișierul legat static conține fiecare pachet și modul, nu apar probleme de compatibilitate. În timp ce în legătura dinamică , deoarece fișierele bibliotecii sunt stocate separat pot exista probleme de compatibilitate (să zicem că un fișier bibliotecă este compilat de versiunea nouă a compilatorului).
- Programele legate static necesită întotdeauna un timp de încărcare constant, în timp ce timpul este variabil în programele conectate dinamic.