LINUX.ORG.RU

Опция -pipe в GCC и Clang

 , , ,


0

2

Решил тут потыкать Clang и появился такой вот вопрос. У GCC есть опция -pipe которая, судя по описанию из мана, хранит результаты промежуточных этапов компиляции в памяти, а не на диске. То есть получается чтение/запись этих файлов происходит быстрее как и в целом компиляция, но в то же время увеличивается потребление памяти. Верно?

В то же время у Clang такой или похожей опции нет вовсе. Каким образом поступает он? Сохраняет/читает на диск или в память?


Каким образом поступает он?

Пишет сразу машинный код, используя ассембер LLVM как бибилотеку

annulen ★★★★★
()
Ответ на: комментарий от annulen

Но ведь ассемблер не моментально же получается? Если я верно помню, то там что-то типа сорцы->AST->сырой IR->оптимизированный IR->ASM. Всё это находится в памяти и потом уничтожается по завершении по дефолту?

daytar
() автор топика
Ответ на: комментарий от daytar

Но ведь ассемблер не моментально же получается? Если я верно помню, то там что-то типа сорцы->AST->сырой IR->оптимизированный IR->ASM.

сорцы -> препроцессированная единица трансляции -> ... -> ASM

Внутренние стадии компиляции, обозначенные как ..., в gcc тоже не сохраняются в отдельные файлы и не гоняются по пайпам, это было бы уж слишком неэффективно. Clang отличается тем, что у него и препроцессор, и комилятор, и ассемблер вызываются в одном процессе, поэтому сериализовать вообще ничего не нужно.

annulen ★★★★★
()
Ответ на: комментарий от EXL

Этим вроде бекенд занимается, и в LLVM это происходит бесшовно, как annulen подсказывает. По сути этот пайп у GCC между мидом и бекендом (as)?

daytar
() автор топика
Ответ на: комментарий от EXL

Только если для целевой платформы не реализован ассембер LLVM, ну или если не заставить его использовать внешний ассембер флагом -fno-integrated-as

annulen ★★★★★
()
Ответ на: комментарий от daytar

Не знаю как сейчас, а раньше еще был пайп между препроцессором и кмопилятором

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.