Разница между компоновщиком и загрузчиком

Автор: Laura McKinney
Дата создания: 3 Апрель 2021
Дата обновления: 8 Май 2024
Anonim
#1 Трансляторы: компилятор, интерпретатор, ассемблер | A-LEVEL НИШ Информатика
Видео: #1 Трансляторы: компилятор, интерпретатор, ассемблер | A-LEVEL НИШ Информатика

Содержание


Linker и Loader - это служебные программы, которые играют важную роль в выполнении программы. Исходный код программы перед выполнением проходит через компилятор, ассемблер, компоновщик, загрузчик в соответствующем порядке. С одной стороны, где линкер принимает объектные коды, сгенерированные ассемблером, и объединяет их для генерации исполняемого модуля. С другой стороны, погрузчик загружает этот исполняемый модуль в основную память для выполнения. Давайте обсудим разницу между компоновщиком и загрузчиком с помощью сравнительной таблицы.

  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. Вывод

Сравнительная таблица

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


Определение линкера

Ассемблер генерирует объектный код исходной программы и передает его компоновщику. Компоновщик берет этот объектный код и генерирует исполняемый код для программы, и передать его загрузчику.

Язык высокого уровня, программы имеют некоторые встроенные библиотеки а также заголовочные файлы, Исходная программа может содержать некоторые библиотечные функции, определения которых хранятся во встроенных библиотеках. Компоновщик связывает эти функции со встроенными библиотеками. В случае, если встроенные библиотеки не найдены, он сообщает об этом компилятору, и компилятор генерирует ошибку.

Иногда большие программы делятся на подпрограммы, которые называются модули, Теперь, когда эти модули скомпилированы и собраны, генерируются объектные модули исходной программы. Компоновщик несет ответственность за объединение / связывание всех объектных модулей для генерации одного исполняемого файла исходной программы. У нас есть два типа линкеров.


Редактор связейЭто компоновщик, который генерирует перемещаемый исполняемый модуль.

Динамический Линкер: Откладывает / откладывает связывание некоторых внешних модулей до тех пор, пока не будет сгенерирован загрузочный модуль / исполняемый модуль. Здесь связывание выполняется во время загрузки или выполнения.

Определение погрузчика

Поскольку программа, которая должна выполняться в настоящее время, должна находиться в основной памяти компьютера. Это ответственность погрузчик, программа в операционной системе, чтобы загрузить исполняемый файл / модуль программы, сгенерированный компоновщиком, в основную память для выполнения. Он выделяет пространство памяти для исполняемого модуля в основной памяти.

Существует три вида загрузки:

  • Абсолютная загрузка
  • Перемещаемая загрузка
  • Динамическая загрузка во время выполнения

Абсолютная загрузкаЭтот подход загружает исполняемый файл программы в та же основная память каждый раз. Но у него есть некоторые недостатки подобно программисту, необходимо знать стратегию назначения для загрузки модулей в основную память. В случае, если программа должна быть изменена, включая некоторую вставку и удаление в программе, тогда все адреса программы должны быть изменены.

Перемещаемая загрузка: При таком подходе компилятор или ассемблер делает не выдает фактический адрес основной памяти, Это производит относительные адреса.

Динамическая загрузка во время выполненияВ этом подходе абсолютный адрес для программы генерируется, когда фактически выполняется инструкция исполняемого модуля. Это очень гибкий, загружаемый модуль / исполняемый модуль может быть загружен в любой регион основной памяти, Выполняемая программа может быть прервана между ними и может быть выгружена на диск и обратно в основную память на этот раз по другому адресу основной памяти.

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

Вывод:

Компоновщик берет объектные модули программы из ассемблера и связывает их вместе, чтобы создать исполняемый модуль программы. Затем исполняемый модуль загружается загрузчиком в основную память для выполнения.