Сравнительная таблица
Основа для сравнения | Linker | погрузчик |
---|---|---|
основной | Он генерирует исполняемый модуль исходной программы. | Загружает исполняемый модуль в основную память. |
вход | Он принимает в качестве входных данных объектный код, сгенерированный ассемблером. | Требуется исполняемый модуль, сгенерированный компоновщиком. |
функция | Он объединяет все объектные модули исходного кода для создания исполняемого модуля. | Он выделяет адреса исполняемому модулю в основной памяти для выполнения. |
Тип / подход | Редактор связей, Динамический компоновщик. | Абсолютная загрузка, перемещаемая загрузка и динамическая загрузка во время выполнения. |
Определение линкера
Ассемблер генерирует объектный код исходной программы и передает его компоновщику. Компоновщик берет этот объектный код и генерирует исполняемый код для программы и передает его загрузчику.
Язык высокого уровня, программы имеют несколько встроенных библиотек и заголовочных файлов . Исходная программа может содержать некоторые библиотечные функции, определения которых хранятся во встроенных библиотеках. Компоновщик связывает эти функции со встроенными библиотеками. В случае, если встроенные библиотеки не найдены, он сообщает об этом компилятору, и компилятор генерирует ошибку.
Иногда большие программы делятся на подпрограммы, которые называются модулями . Теперь, когда эти модули скомпилированы и собраны, генерируются объектные модули исходной программы. Компоновщик несет ответственность за объединение / связывание всех объектных модулей для генерации одного исполняемого файла исходной программы. У нас есть два типа линкеров.
Редактор связей : это компоновщик, который генерирует перемещаемый исполняемый модуль.
Динамический компоновщик : он откладывает / откладывает связывание некоторых внешних модулей до тех пор, пока не будет сгенерирован загрузочный модуль / исполняемый модуль. Здесь связывание выполняется во время загрузки или выполнения.
Определение погрузчика
Поскольку программа, которая должна выполняться в настоящее время, должна находиться в основной памяти компьютера. Загрузчик, программа в операционной системе, несет ответственность за загрузку исполняемого файла / модуля программы, сгенерированного компоновщиком, в основную память для выполнения. Он выделяет пространство памяти для исполняемого модуля в основной памяти.
Существует три вида загрузки:
- Абсолютная загрузка
- Перемещаемая загрузка
- Динамическая загрузка во время выполнения
Абсолютная загрузка : этот подход каждый раз загружает исполняемый файл программы в одну и ту же область основной памяти . Но у него есть некоторые недостатки : программист должен знать стратегию назначения для загрузки модулей в основную память. В случае, если программа должна быть изменена, включая некоторую вставку и удаление в программе, тогда все адреса программы должны быть изменены.
Перемещаемая загрузка: при таком подходе компилятор или ассемблер не создает фактический адрес основной памяти . Это производит относительные адреса.
Динамическая загрузка во время выполнения : при таком подходе абсолютный адрес для программы генерируется, когда инструкция исполняемого модуля фактически выполняется. Это очень гибкий, загружаемый модуль / исполняемый модуль может быть загружен в любую область основной памяти . Выполняемая программа может быть прервана между ними и может быть выгружена на диск и обратно в основную память на этот раз по другому адресу основной памяти.
Ключевые различия между компоновщиком и загрузчиком
- Основное различие между компоновщиком и загрузчиком состоит в том, что компоновщик генерирует исполняемый файл программы, тогда как загрузчик загружает исполняемый файл, полученный из компоновщика, в основную память для выполнения .
- Компоновщик принимает объектный модуль программы, сгенерированной ассемблером. Однако загрузчик принимает исполняемый модуль, сгенерированный компоновщиком.
- Компоновщик объединяет все объектные модули программы для генерации исполняемых модулей, а также связывает библиотечную функцию в объектном модуле со встроенными библиотеками языка программирования высокого уровня. С другой стороны, загрузчик выделяет место для исполняемого модуля в основной памяти.
- Компоновщик может быть классифицирован как редактор связей и динамический компоновщик, тогда как загрузчик может быть классифицирован как абсолютный загрузчик, перемещаемый загрузчик и динамический загрузчик времени выполнения .
Заключение:
Компоновщик берет объектные модули программы из ассемблера и связывает их вместе, чтобы создать исполняемый модуль программы. Затем исполняемый модуль загружается загрузчиком в основную память для выполнения.