Paras vastaus
Ennen kuin siirrytään eroon, näemme linkitysprosessin lyhyesti.
Miksi linkittäjä?
Kun kirjoitat C-koodia (tai muuta kieltä), se tallennetaan .c-muodossa.
#include
int main(){
printf("quora");
return 0;
}
Nyt tämä ohjelma käy läpi kokoamisvaiheen, jossa tämä lähdekoodi muunnetaan konekielisiksi ohjeiksi. Nämä ovat objektitiedostot, jotka on tallennettu muodossa .o tai .obj. Jos meillä on 2 erillistä tiedostoa, meillä on 2 erillistä obj-tiedostoa. Nämä tiedostot ovat vain käännös ohjelmastasi, jotta voimme suorittaa nämä ohjelmat, meidän on luotava suoritettava tiedosto, jonka käyttöjärjestelmä voi todella suorittaa. Tätä tarkoitusta varten käytämme linkkiä.
Nyt linkkeri luo yhden suoritettavan tiedoston monista objektitiedostoista. Nyt C-ohjelmassa käytimme main () -funktiota, mutta missä on sen määritelmä. Kääntäjä on rajoitettu vain yhteen tiedostoon, joten se ei etsi viitteitä, jotka on mahdollisesti ilmoitettu ja määritelty muissa tiedostoissa.
Linker etsii useita tiedostoja tälle ”main ()” -funktion määritelmälle linkittää ne. Tulen nyt kysymykseesi.
Staattinen vs. dynaaminen linkitys:
- Kohdassa staattinen linkitys , kaikki kirjastomoduulit kopioidaan lopulliseen suoritettavaan kuvaan. Kun ohjelma ladataan, käyttöjärjestelmä sijoittaa muistiin vain yhden tiedoston, joka sisältää sekä lähdekoodin että viitekirjastot. dynaamisessa linkityksessä vain ulkoisten tai jaettujen kirjastojen nimet tallennetaan muistiin. Dynaamisen linkityksen avulla monet ohjelmat voivat käyttää suoritettavan moduulin yhtä kopiota.
- Staattisen linkityksen tekevät linkkerit kääntämisen viimeisessä vaiheessa, kun taas dynaamisen linkityksen suorittaa käyttöjärjestelmä ajon aikana.
- Staattisesti linkitetyt tiedostot kuluttaa enemmän levyä ja muistia, koska kaikki moduulit on jo linkitetty. Dynaamisessa linkityksessä kuitenkin vain yksi kopio viitemoduulista on tallennettu, jota monet ohjelmat käyttävät, mikä säästää muistia ja levytilaa.
- Staattisessa linkityksessä , jos ulkoista lähdeohjelmaa muutetaan, ne on käännettävä uudelleen ja linkitettävä uudelleen. Mutta dynaamisen linkityksen tapauksessa vain yksi moduuli on päivitettävä ja käännettävä uudelleen.
- Staattisesti linkitetyt ohjelmat ovat nopeampi kuin niiden dynaaminen vastine.
- Koska staattisesti linkitetty -tiedosto sisältää kaikki paketit ja moduulit, yhteensopivuusongelmia ei esiinny. dynaamisessa linkityksessä , koska kirjastotiedostot on tallennettu erikseen, voi olla yhteensopivuusongelmia (sanotaan, että yksi kirjastotiedosto on käännetty kääntäjän uudella versiolla).
- Staattisesti linkitetyt ohjelmat lataavat aina vakiona, kun taas dynaamisesti linkitettyjen ohjelmien aika vaihtelee.