Legjobb válasz
Mielőtt továbblépne a különbségre, röviden áttekintheti az összekapcsolási folyamatot.
Miért linkelő?
Amikor C kódot (vagy bármely más nyelvet) ír, akkor azt .c formátumban tárolja.
#include
int main(){
printf("quora");
return 0;
}
Ez a program most átmegy azon fordítási szakaszon, amelyben a forráskódot konvertálják gépnyelvi utasításokká. Ezek az objektumfájlok .o vagy .obj formátumban vannak tárolva. Ha 2 külön fájlunk van, akkor 2 külön objekt fájlunk lesz. Ezek a fájlok csak a program fordításai, a programok futtatásához elő kell állítanunk egy futtatható fájlt, amelyet az operációs rendszer ténylegesen futtathat. Erre a célra hivatkozót használunk.
Most a linker egyetlen futtatható fájlt hoz létre sok objektumfájlból. Most a C programunkban a main () függvényt használtuk, de hol van annak meghatározása. A fordító hatóköre csak egy fájlra korlátozódik, így nem keresi azokat a hivatkozásokat, amelyeket esetleg más fájlokban deklaráltak és definiáltak.
A Linker több fájlban keres erre a „main ()” függvénydefinícióra és összeköti őket. Most a kérdésére térek.
Statikus és dinamikus összekapcsolás:
- In statikus összekapcsolás , az összes könyvtári modul átmásolásra kerül a végső futtatható képre. A program betöltésekor az operációs rendszer csak egyetlen fájlt helyez el a memóriában, amely tartalmazza mind a forráskódot, mind a hivatkozó könyvtárakat. Míg a dinamikus összekapcsolás esetén csak a külső vagy megosztott könyvtárak neve kerül a memóriába. A dinamikus összekapcsolás lehetővé teszi, hogy sok program használja a futtatható modul egy példányát.
- A statikus összekapcsolást a linkelők az összeállítás utolsó lépésében végzik, míg a dinamikus összekapcsolást az operációs rendszer futási időben végzi.
- Statikusan összekapcsolt fájlok több lemezt és memóriát fogyaszt, mivel az összes modul már össze van kapcsolva. De a dinamikus összekapcsolás esetén a referencia modulnak csak egy példányát tárolják, amelyet sok program használ, ezáltal megtakarítva a memóriát és a lemezterületet.
- A statikus összekapcsolás esetén, ha a külső forrásprogram megváltozik, akkor azokat újra össze kell állítani és újra össze kell kapcsolni. De dinamikus összekapcsolás esetén csak egyetlen modult kell frissíteni és újrafordítani.
- A statikusan összekapcsolt programok gyorsabbak, mint dinamikus megfelelőik.
- Mivel a statikusan összekapcsolt fájl minden csomagot és modult tartalmaz, kompatibilitási problémák nem merülnek fel. Míg a dinamikus összekapcsolás esetén, mivel a könyvtárfájlokat külön tárolják, kompatibilitási problémák adódhatnak (mondjuk, az egyik könyvtárfájlt a fordító új verziója fordítja). >
- A statikusan összekapcsolt programok mindig állandó betöltési időt vesznek igénybe, míg a dinamikusan összekapcsolt programoknál ez az idő változó.