Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Первый вопрос из книги вильямса:Что такое компоновка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как организовать буффер переменной длины? http://www.cyberforum.ru/cpp-beginners/thread63633.html
Есть задача - отправлять в ком порт файл. Коней пакета 7E/ если в середине пакета находится символ 7Е - приемник смотрит перез ним контрольную сумму и выдает оштбку. поэтму в протоколе 7Е меняется на...
C++ Сортировка двунаправленного списка Посоветуйте пожалуйста адекватный метод сортировки двунаправленного списка. Я сопсно вычитал на вики, что лучше всего сортировать путем разбиения списка на 2. Т.е "на входе имеются указатели на... http://www.cyberforum.ru/cpp-beginners/thread63631.html
Программа построения графа Герца C++
добрый вечер! вот есть такая задачка Ориентированный граф сильно связен, если для любой пары вершин u,v существует путь из u в v. Компонентой сильной связности назовем произвольный...
C++ Обработка строк на C, за коментарии +))
Задача. Написать программу, которая в исходном тексте определяет количество каждой из букв и все символы, которые не являются буквами заменить символом '@'. На экран вывести список букв с...
C++ Обработка одномерных масивов, обьясните новичку. http://www.cyberforum.ru/cpp-beginners/thread63600.html
1) Найти максимальный элемент массива A. 2) Найти среднее арифметическое элементов массива В. A (25), B (30) Метод сортировки массива А : перестановкой. Заранее спасибо.
C++ Обработка одномерных масивов. 1) Найти максимальный элемент массива A. 2) Найти среднее арифметическое элементов массива В. A (25), B (30) Метод сортировки массива А : перестановкой. Заранее спасибо. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
14.11.2009, 00:38
Цитата Сообщение от МедведЪ Посмотреть сообщение
превращает файл срр в ob
Этот процесс более правильно называется "трансляция", хотя зачастую термин "компиляция" употребляют именно для этого

Файл obj - это файл с кодом, но в котором ещё неизвестны адреса глобальных переменных и функций. Допустим, ты написал код по вызову printf'а, но самой процедуры printf у тебя в коде нет. В объектном файле построится код, где для вызова printf будет стоять операция call, но втом месте, где должен быть адрес printf останется дырка (т.е. нули в нужном количестве) и специальным образом это дырка подсвечивается типа "вот в таком-то месте должен стоять адрес printf". Эта дырка называется relocation (по русски переводят вроде как "перемещение").

Библиотеку на начальном этапе можешь тоже считать как объектный файл. Далее, когда тебе нужно получить исполняемую программу, запускается процесс линковки ("связывания", "компоновки"). В линковку подаются все объектные файлы и библиотеки. Линкер из всех этих файлов лепит исполняемый файл с кодом. Теперь, когда код имеется весь, линкер вычисляет для каждой переменной и функции её адрес, смотрит во всех местах relocation'ы и в нужные места прописывает правильный адрес. Таким образом у тебя получается финальный код, где всё связано друг с другом по адресам.

Но вот на пальцах будет примерно так.

Компилятору на вход подаётся программа на языке, а на выходе получается исполняемый файл, готовый к работе. Интерпретатор на выходе ничего не получает, он простоходит по файлу и по очереди исполняет каждую инструкцию языка. Грубо говоря, если поставлена задача "прочитать текстовый файл и для каждой строки напечатать её длину" то это в какой-то степени вырожденный случай интерпретации. Для каждого исполнения ты запускаешь свою программу (которая выполняет роль интерпретатора) и подаёшь ей на вход текстовый файл (который выполняет роль текста программы)
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru