LINUX.ORG.RU

Компиляция

 ,


0

0

В заметке "Как происходит компиляция" (автор Mike Diehl, перевод А.Тарасова) подробно объясняется ход процесса компиляции исходного текста в исполняемую программу. В первой части рассмотрены этапы компиляции, выполняемые компилятором GCC - обработка препроцессором, трансляция, ассемблирование и линковка. Во второй части процесс линковки рассмотрен более подробно. Также описаны системные вызовы Linux и то, как компилятор GCC проводит оптимизации.

>>> Подробности

Re: Компиляция

Азбука, понравилась и сама и перевод.

GAMer ★★★★★ ()

Re: Компиляция

IBM_dW, ты? :)

ikm ★★ ()

Re: Компиляция

В помошь студенту первокурснику?

los_nikos ★★★★★ ()

Re: Компиляция

>подробно объясняется ход процесса компиляции исходного текста в исполняемую программу.

Новость составлял петросян? :)

AX ★★★★★ ()

Re: Компиляция

Наглядная такая демка работы gcc

los_nikos ★★★★★ ()

Re: Компиляция

Во второй части процесс линковки как раз не описан, автор в самом начале ушёл от темы. Но, в любом случае, для новичков будет полезно.

onemore ()

Re: Компиляция

> Основную часть кода занимают операции, от начала выполнения программы и до ее завершения.

Хорошо блин сказано :)

anonymous ()

Re: Компиляция

Анонимусу не понравилось.

anonymous ()

Re: Компиляция

хм сначала думал какая-то пионерия, но норм думаю многим понравится пригодится, хотя тема раскрыто не доконца

fura13 ★★★ ()

Re: Компиляция

А мне понравилось. Коротко и наглядно.

zDemoniac ()
Ответ на: Re: Компиляция от zDemoniac

Re: Компиляция

А разве не пионерия? Основы даются, для двоечников-недоучек.

anonymous ()

Re: Компиляция

Этот бы сабж, за лет пять назад, когда я свой компилятор для курсовой писал...

anonymous ()

Re: Компиляция

такое на 1-м курсе дается, хотя нет - это на и на 1-й курс не тянет, это статья для ПТУ-ников?

lester ★★★★ ()
Ответ на: Re: Компиляция от lester

Re: Компиляция

У Вас слишком лестные представления об уровне ПТУ-шников, по крайней мере, большинства из них. Ко мне приходят студенты, закончившие третий курс, и им именно такие вещи и приходится объяснять...

hobbit ★★★★★ ()
Ответ на: Re: Компиляция от lester

Re: Компиляция

> такое на 1-м курсе дается нам не давалось и что? кто Вам сказал, что экономистам это на 1-ом курсе будет даваться? а на втором? а нахера это вообще экономистам в университете? а для общего развития или в личных интересах почему бы нет

anonymous ()

Re: Компиляция

Наконец выяснил что i <=5 gcc заворчивает в одну ассемблерную команду(даже при нулевом уровне оптимизации), а некоторые программеры уверены что в две.

some_x ()

Re: Компиляция

>как компилятор GCC проводит оптимизации

c опцией --fdump-tree-all можно конкретно посмотреть, на каких стадиях что оптимизируется, а данные статьи будут полезны разве что школьникам

frame ★★★ ()
Ответ на: Re: Компиляция от some_x

Re: Компиляция

>Наконец выяснил что i <=5 gcc заворчивает в одну ассемблерную команду(даже при нулевом уровне оптимизации), а некоторые программеры уверены что в две.

Если if (i<=5) это две команды, а если цикл, то при оптимизации по скорости как минимум три (mov+dec+jz/jnz)

anonymous ()

Re: Компиляция

Ходил по ссылке.

Автору, переводчику и автору новости большое спасибо. Хорошие статьи.

AndreyKl ★★★★★ ()

Re: Компиляция

Для неспециалистов-начинающих — самое то.

Кто-нибудь может ответить на 2 вопроса по статье http://rus-linux.net/lib.php?name=MyLDP/algol/compilation/compilation-2.html ?

1. Зачем компилятор разворачивает цикл в 5 команд печати?

2. В последней программе подряд идут pushl %ecx и popl %ecx. Зачем они нужны?

question4 ★★★★★ ()
Ответ на: Re: Компиляция от anonymous

Re: Компиляция

>> Основную часть кода занимают операции, от начала выполнения программы и до ее завершения.

> Хорошо блин сказано :)

Это какбэ намёк, что оставшуюся часть занимает мусор и вирусы. ;-)

atrus ★★★★★ ()

Re: Компиляция

Единственный недостаток статьи: чтобы разобраться в абзаце про a.out и ELF нужно заранее это знать :)

question4 ★★★★★ ()
Ответ на: Re: Компиляция от question4

Re: Компиляция

>1. Зачем компилятор разворачивает цикл в 5 команд печати?

Последовательные команда быстрее цикла, т.к. не нужно помнить адрес возвращения в начало цикла и переходить туда.

Crew ()

Re: Компиляция

Отличная статья!

kristall ★★ ()
Ответ на: Re: Компиляция от zDemoniac

Re: Компиляция

А мне тоже понравилось. Хорошая статья.

Jayrome ★★★★★ ()
Ответ на: Re: Компиляция от Crew

Re: Компиляция

>Последовательные команда быстрее цикла, т.к. не нужно помнить адрес >возвращения в начало цикла и переходить туда.

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

anonymous ()

Re: Компиляция

про стрейс хорошо сказано, давно его юзаю для диагностики любых программ, если встроенных средств логирования не хватает

gr_buza ★★★★ ()

Re: Компиляция

Клево. Авторам - спасибо!

k0l0b0k ★★ ()
Ответ на: Re: Компиляция от anonymous

Re: Компиляция

По твоей "логике" любой начинающий "двоечник-недоучка", в том числе и ты когда тока начинал (если вообще начинал..)

anonymous ()

Re: Компиляция

> vikos

Не понял...

Gharik ()
Ответ на: Re: Компиляция от gr_buza

Re: Компиляция

> про стрейс хорошо сказано, давно его юзаю для диагностики любых программ, если встроенных средств логирования не хватает

Ты лучше прошивку от старого пятака дизассемблируй и перепиши на асме, а то новый покупать жаба душит ;)

Gharik ()

Re: Компиляция

За "компиляцию" и "линковку" - не зачёт. Ибо "сборка" и "связывание".

Killy ()
Ответ на: Re: Компиляция от anonymous

Re: Компиляция

> Этот бы сабж, за лет пять назад, когда я свой компилятор для курсовой писал...

По этому сабжу ничего хорошего не напишешь.

Классику надо читать. http://lib.mexmat.ru/books/2444

anonymous ()

Re: Компиляция

> extern int puts (__const char *__s);

> Здесь puts() объявлена как внешняя функция (extern), возвращающая целочисленной значение и принимающая массив постоянных символов в качестве параметра

Эээ, исправьте "массив постоянных символов". Это указатель на строку. Ключевое слово __const лишь указывает, что внутри puts() эта пересенная является константой.

> Результат трансляции можно увидеть с помощью ключа -S:

> gcc -S test.c

> Будет создан файл с именем test.s

Виндовс наша ОС?! gcc выдаёт файл test.S. Именно большая "S".

anonymous ()
Ответ на: Re: Компиляция от anonymous

Re: Компиляция

> инструкции типа jmp появляющиеся при использование цикла опустошают конвейр

Месье не в курсе про predictable execution?

matumba ★★★★★ ()
Ответ на: Re: Компиляция от Killy

Re: Компиляция

> За "компиляцию" и "линковку" - не зачёт. Ибо "сборка" и "связывание".

С задних парт комменты двоечников не принимаются!
Устоявшаяся терминология - "компилляция" и "сборка". Это какой-то буржуй-недоучка назвал link, хотя по сути происходит именно assembling.

matumba ★★★★★ ()

Re: Компиляция

Пробежался по диагонали, натыкаюсь на фразу: "Я не силен в языке ассемблера, однако....". ГА-ГА-ГА! "И эти люди запрещают мне ковыряться в носу!". :)))))))

Как можно говорить о компилляции, если "не силён" в её базовой части? А мож там и не ассемблер вовсе, а какие-нть жабокоды! :)
Ладно, для начинающих сойдёт.

matumba ★★★★★ ()

Re: Компиляция

Пробежал глазами. Неплохо. Некоторым это может пригодиться.

Igron ★★★★★ ()

Re: Компиляция

Хорошие статьи на лоре? Фантастика!

anonymous ()
Ответ на: Re: Компиляция от anonymous

Re: Компиляция

>Виндовс наша ОС?! gcc выдаёт файл test.S. Именно большая "S".

Остынь красноглазик, маленькую "s" он выдаст, а большими "S" обычно именуют рукописные файлы

anonymous ()
Ответ на: Re: Компиляция от matumba

Re: Компиляция

>Месье не в курсе про predictable execution?

вообще это называется branch prediction, умник

anonymous ()
Ответ на: Re: Компиляция от gr_buza

Re: Компиляция

> про стрейс хорошо сказано, давно его юзаю для диагностики любых программ

Ыыыы... Я им искал конфиг с указанием местоположения шрифтов в RedHat 8 - первый в котором был gnome2/gtk2/fontconfig в качестве базовых компонентов DE.

no-dashi ★★★★★ ()
Ответ на: Re: Компиляция от Killy

Re: Компиляция

> За "компиляцию" и "линковку" - не зачёт. Ибо "сборка" и "связывание".

У Вас проблемы с терминологией, сэр?

Compiling -- компиляция

Linking -- компоновка (в старых материалах "связывание"; о том, почему сейчас так не говорят -- ниже)

Building -- сборка.

От термина "связывание" отказались, когда появился термин "binding" -- "привязка", который иногда переводится как "связывание". Однако это совсем не "linking", и решили не рисковать. Говорю с уверенностью по крайней мере по поводу микрософта и сана. У GNU, насколько мне известно, своей концепции локализации нет.

Orlusha ★★★★ ()
Ответ на: Re: Компиляция от matumba

Re: Компиляция

> Как можно говорить о компилляции, если "не силён" в её базовой части? А мож там и не ассемблер вовсе, а какие-нть жабокоды! :) Ладно, для начинающих сойдёт.

Без ":)": в сановском пакете компиляторов специальный промежуточный язык, а не ассемблер. В этом вопросе возможны разные подходы.

Orlusha ★★★★ ()

Re: Компиляция

> ... окружение Make ...

> ... линковка... линковщик...

> ... для организации и компиляции исходных файлов ...

> ... Линковщик Linux чрезвычайно мощный ... (вообще-то "имеет очень много возможностей" -- прим. Orlusha)

Злобственно... :(

Orlusha ★★★★ ()

Re: Компиляция

вопросы на тройку:
чем занимается /sbin/ldconfig
как работает PRELINK

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