Разлика между Linker и Loader

Автор: Laura McKinney
Дата На Създаване: 3 Април 2021
Дата На Актуализиране: 7 Може 2024
Anonim
CppCon 2018: Matt Godbolt “The Bits Between the Bits: How We Get to main()”
Видео: CppCon 2018: Matt Godbolt “The Bits Between the Bits: How We Get to main()”

Съдържание


Linker и Loader са помощните програми, които играят основна роля в изпълнението на програмата. Изходният код на програма преминава през компилатор, асемблер, линкер, товарач в съответния ред, преди изпълнението. От една страна, където линкер въвежда обектните кодове, генерирани от асемблера и ги комбинира, за да генерира изпълним модул. От друга страна, товарач зарежда този изпълним модул в основната памет за изпълнение. Нека обсъдим разликата между Linker и loader с помощта на сравнителна диаграма.

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

Основа за сравнениелинкертоварач
ОсновенТой генерира изпълним модул на изходна програма.Той зарежда изпълним модул в основната памет.
ВходТой приема като вход обектния код, генериран от асемблер.Той отнема изпълним модул, генериран от линкер.
функцияТой комбинира всички обектни модули на изходния код за генериране на изпълним модул.Той разпределя адресите на изпълним модул в основната памет за изпълнение.
Вид / подходРедактор на връзки, динамичен линкер.Абсолютно натоварване, преместващо се зареждане и динамично натоварване по време на работа.


Определение за Linker

Асемблерът генерира обектния код на изходна програма и го предава на линкера. Линкерът приема този обективен код и генерира изпълним код за програмата и я предайте на товарача.

Езикът на високо ниво, програмите имат някои вградени библиотеки и заглавни файлове, Изходната програма може да съдържа някои библиотечни функции, чието определение се съхранява във вградените библиотеки. Линкерът свързва тези функции с вградените библиотеки. В случай, че вградените библиотеки не бъдат намерени, той уведомява компилатора и след това компилаторът генерира грешката.

Понякога големите програми се разделят на подпрограмите, които се наричат модули, Сега, когато тези модули са компилирани и сглобени, се генерират обектните модули на изходната програма. Линкерът отговаря за комбинирането / свързването на всички обектни модули за генериране на един изпълним файл на изходната програма. Имаме два вида свързващи устройства.


Редактор на връзки: Това е линкер, който генерира преместваем, изпълним модул.

Динамичен линкер: Той отлага / отлага връзката на някои външни модули, докато не се генерира товарния / изпълним модул. Тук свързването се извършва по време на зареждане или време на изпълнение.

Определение за товарач

Тъй като програмата, която трябва да се изпълни в момента, трябва да се намира в основната памет на компютъра. Това е отговорност на товарач, програма в операционна система, която да зареди изпълнимия файл / модул на програма, генериран от линкера, в основната памет за изпълнение. Той разпределя паметта на изпълним модул в основната памет.

Има три вида подходи за товарене:

  • Абсолютно натоварване
  • Преместване на товари
  • Динамично зареждане на работното време

Абсолютно натоварване: Този подход зарежда изпълнимия файл на програма в a същото основно място за памет всеки път. Но има някои недостатъци подобно на програмист трябва да е запознат със стратегията за възлагане за зареждане на модулите в основната памет. В случай, че програмата трябва да бъде модифицирана, включваща някакво вмъкване и изтриване в програмата, тогава всички адреси на програмата трябва да бъдат променени.

Преместващо се зареждане: При този подход компилаторът или асемблерът прави не създават действителен адрес на основната памет, Той произвежда относителните адреси.

Динамично зареждане на време на работа: При този подход абсолютният адрес за дадена програма се генерира, когато действително се изпълни инструкция на изпълним модул. Той е много гъвкав, зареждащият се модул / изпълним модул може да бъде зареден в всеки регион на основната памет, Изпълняващата програма може да бъде прекъсната между тях и да бъде заменена на диска и обратно към основната памет този път на различен основен адрес в паметта.

  1. Ключовата разлика между линкер и товарач е, че линкерът генерира изпълним файл на програма, докато, товарачът зарежда изпълним файл, получен от линкер, в основна памет за изпълнение.
  2. Линкерът приема обект модул на програма, генерирана от асемблера. Въпреки това, товарачът приема изпълним модул генериран от линкера.
  3. Линкерът комбинира всички обектни модули на програма за генериране изпълними модули тя също свързва библиотечна функция в обектния модул до вградени библиотеки на езика за програмиране на високо ниво. От друга страна, товарач разпределя пространство за изпълним файл модул в основната памет.
  4. Линкерът може да бъде класифициран като редактор за връзка, и динамичен линкер като има предвид, че товарачът може да бъде класифициран като абсолютен товарач, преместващ се товарач и динамичен товарач за изпълнение.

Заключение:

Линкерът взема обектните модули на програма от асемблера и ги свързва заедно, за да генерира изпълним модул на програма. След това изпълним модул се зарежда от товарача в основната памет за изпълнение.