принцип работы компилятора С++ и роль Ассемблера в нем ?

Компьютеры программирование Наука C++ Ассемблер

Исходный код >> запускается процесс компиляции:
-проверяется логика программы
-удаляются комментарии и пробелы
-транслируется код в объектные файлы (машинный код ввиде шестнадцатеричный инструкций)
-линковщик соединяет "объектные файлы" c библиотеками (тоже в виде объетных файлов) объединяет
их с "исполнимым модулем" (чистым бинарным кодом -командами для процессора) и создает единый
исполнимый модуль (с готовыми прямыми командами для процессора )
И при этом ни язык ассемблера и ни его транслятор(ассемблер) здесь не задействован - так как сам компилятор файлов.сpp может
быть другой запущенной программой написанной на том же с++ ?

и получатся что сборщик-ассемблер(транслятор мнемоник команд в машинный код) здесь не нужен это делает программа-компилятор с++ ?

Примечание:
"-за дело берется собственно программа "ассемблер", которая уже компилирует код с языка ассемблера в бинарный код."
- так это ж замедляет процесс cоздания исполняемого файла - разве невозможно сразу в машинный код транслировать без ассемдлера?
Ответы:
> транслируется код в объектные файлы
> (машинный код ввиде шестнадцатеричный    инструкций)
Это делает не компилятор языка С++, дело С++ компилятора (помимо всего прочего) оттранслировать код на С++ в код на языке ассемблера. А затем за дело берется собственно программа "ассемблер", которая уже компилирует код с языка ассемблера в машинный код.
Бредятина полная в ответе 74. C++ toolchain всего-то препроцессор и компилятор, далее линковка и всё. Асма там не было, нету и не будет, всё собирает компилятор в натив, а что obj это не exe - так см. что такое линковщик.
> так это ж замедляет процесс cоздания исполняемого файла - разве невозможно
Это делается для упрощения части компилятора, которая отвечает за генерацию кода. Так как компилятор С++ сам по себе невероятно сложная вещь и делать ее еще сложнее включая туда ассемблер вряд ли кому-то захочется. Во вторых мы можем посмотреть эти файлы (на языке ассемблера и тем самым проконтролировать работу кодогенератора). В третьих, так проще переносить сам компилятор на другие микропроцессорные архитектуры.
> Асма там не было, нету и не будет, всё собирает компилятор в натив,
Почитайте о том зачем нужна опция -S в gcc.
Или хотя-бы прочитайте эту статью: http://pyviy.blogspot.ru/2010/12/gcc.html
Вы точно говорите про g++, а не про другой компилятор?
Машинный код на разных процессорах отличается. Для одной архитектуры язык ассемблер один. Вот поэтому он и нужен.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.