Предыдущий урок: Как работает компьютер? Часть 64. Интерпретаторы: перевод по одному предложению
Мы прошли долгий путь: от написания кода на языке высокого уровня до его преобразования компилятором или интерпретатором. Но что является конечным продуктом этого процесса? Что мы на самом деле получаем на выходе и передаём пользователю для запуска? Финализированными результатами сборки являются исполняемые файлы и библиотеки. Это те самые артефакты, которые уже содержат всё необходимое для работы программы и которые операционная система умеет загружать в память и выполнять.
Давайте представим, что наша программа — это кулинарный рецепт. Исходный код — это список ингредиентов и инструкций на понятном нам языке. Исполняемый файл — это уже полностью приготовленное блюдо, которое можно сразу съесть. А библиотека — это полуфабрикат или готовая приправа (например, соус), которую мы можем использовать в процессе приготовления разных блюд, чтобы не делать её с нуля каждый раз.
Исполняемые файлы
Это самостоятельные, готовые к запуску программы. Когда вы дважды щёлкаете по иконке приложения, вы запускаете именно исполняемый файл. Внутри находится:
1. Машинный код: Основное содержимое — это инструкции для процессора, полученные в результате компиляции вашего исходного кода.
2. Данные: Встроенные в файл константы, строки, статические массивы данных, которые нужны программе для работы (например, вшитые изображения).
3. Заголовок: Специальная служебная информация в начале файла, которая объясняет операционной системе, как именно его нужно загружать в память. В заголовке указано:
- Точка входа: Адрес в памяти, по которому находится самая первая инструкция программы, которую должен выполнить процессор. Это аналог функции main() в вашем коде.
- Таблица секций: Где в файле находится код, а где — данные.
- Требования: Какая версия ОС требуется, нужно ли выделять много памяти и т.д.
Процесс запуска:
- Вы запускаете программу program.exe.
- Операционная система читает его заголовок, проверяет совместимость.
- ОС выделяет оперативную память и загружает в неё машинный код и данные из файла.
- ОС настраивает процессор так, чтобы его счетчик команд указывал на точку входа программы.
- Управление передаётся на машинный код вашей программы, и процессор начинает её выполнение.
Библиотеки
Очень редко программа пишется полностью с нуля. Гораздо эффективнее использовать уже готовые куски кода для решения стандартных задач: работы с сетью, отрисовки окон, сложных математических вычислений. Эти готовые коллекции функций и называются библиотеками.
Библиотеки бывают двух основных типов:
1. Статические библиотеки (Static Libraries, .lib в Windows, .a в Linux)
На этапе линковки (финального этапа компиляции) код статической библиотеки полностью копируется внутрь вашего исполняемого файла. Получается один единственный, самодостаточный исполняемый файл, которому для работы больше ничего не нужно. Размер исполняемого файла увеличивается. Если 10 программ используют одну и ту же статическую библиотеку, то каждая из них будет хранить её копию у себя внутри, занимая лишнее место на диске и в памяти.
2. Динамические библиотеки (Shared Libraries, .dll в Windows, .so в Linux)
Код динамической библиотеки НЕ копируется в исполняемый файл. Вместо этого в вашу программу подставляется лишь небольшая запись-заглушка: «функцию printf ищи в файле stdlib.dll». Когда ОС загружает вашу программу, она видит, что ей нужны какие-то .dll-файлы. Она находит их и загружает код этих библиотек в память один раз, но делает его доступным для всех программ, которые в нём нуждаются. Получается теперь на диске и в оперативной памяти хранится только одна копия библиотеки. Чтобы исправить ошибку в библиотеке или добавить новую функцию, достаточно заменить один файл .dll. Все программы, которые его используют, автоматически начнут работать с обновлённой версией. Но программа становится менее переносимой. Если на компьютере пользователя не окажется нужной версии .dll-файла, программа выдаст ошибку и не запустится.
Процесс компиляции заканчивается созданием исполняемых файлов и библиотек. Исполняемый файл — это законченная, готовая к выполнению программа, содержащая машинный код и данные. Библиотеки — это хранилища готового кода для повторного использования, которые либо становятся частью исполняемого файла (статические), либо подгружаются отдельно по требованию (динамические). Понимание этой разницы помогает осознать, как большие программные комплексы собираются из маленьких частей и как операционная система управляет их работой.
Спасибо за внимание!
Следующий урок: Как работает компьютер? Часть 66. Пишем первую простую программу на Python
Если вам интересно копать глубже, разбирать реальные кейсы и получать знания, которых нет в открытом доступе — вам в IT Extra Premium.
Что внутри?
✅ Закрытые публикации: Детальные руководства, разборы сложных тем (например, архитектура высоконагруженных систем, глубокий анализ уязвимостей, оптимизация кода, полезные инструменты и объяснения сложных тем простым и понятным языком).
✅ Конкретные инструкции: Пошаговые мануалы, которые вы сможете применить на практике уже сегодня.
✅ Без рекламы и воды: Только суть, только концентрат полезной информации.
✅ Ранний доступ: Читайте новые материалы первыми.
Это — ваш личный доступ к экспертизе, упакованной в понятный формат. Не просто теория, а инструменты для роста.
👉 Переходите на Premium и начните читать то, о чем другие только догадываются.
👍 Ставьте лайки если хотите разбор других интересных тем.
👉 Подписывайся на IT Extra на Дзен чтобы не пропустить следующие статьи
________________________________________________________________________
👇
Понравилась статья? В нашем Telegram-канале ITextra мы каждый день делимся такими же понятными объяснениями, а также свежими новостями и полезными инструментами. Подписывайтесь, чтобы прокачивать свои IT-знания всего за 2 минуты в день!