почему мы разделяем компоновщики и загрузчики на отдельные программы - PullRequest
0 голосов
/ 22 января 2011

Ребята, я хочу, почему мы должны отделить прогу линкера и загрузчика? Что я понимаю, так это то, что компоновщик создает перемещаемый код, а также создает таблицу символов, а также предоставляет информацию о любой динамически связанной библиотеке и загрузчике просто загружать исполняемые файлы в память? Почему мы не можем объединить их обоих?

Спасибо

1 Ответ

5 голосов
/ 22 января 2011

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

Если вам требуется, чтобы загрузчик выполнял связывание, вы увеличиваете сложность загрузчика и увеличиваете размер ядра операционной системы.Связывание - чрезвычайно сложная работа, которая может занять значительное время.Это не работа операционной системы.ОС должна заниматься выполнением программ, а не их сборкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...