|
Порядок компиляции файлов |
|
|
|
 |
Ответов
|
Mar 4 2009, 05:24
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(zltigo @ Mar 3 2009, 23:25)  АБСОЛЮТНО безразлично. а позволю себе вопрос: вот у компоновщика есть опция relax - когда он пытается заменить дальние джампы и вызовы подпрограмм короткими... и вот в случае, если из-за порядка сборки отельные секции расположатся рядом - этот этап даст существенный эффект, т.к. много "перекрестных" вызовов заменится на короткие, а если они окажутся далеко друг от друга - эффекта не будет. или компоновщик более интеллектуальный и тасует секции (если можно, конечно) уже после компиляции сам? вообще, есть смысл в моих размышлениях или они надуманы?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 4 2009, 23:39
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(MrYuran @ Mar 4 2009, 07:48)  есть такая опция -shared, которая позволяет видеть компилятору все исходники одновременно, что позволяет максимально оптимизировать код. По-моему, так. --combine --whole-program combine для того, чтобы все перечисленные в командной строе исходники собрать в один объектник (сначала объединив в один исходник) а whole-program - чтобы рассматривал это как уже законченную программу. Благодаря этому неиспользуемые функции выбрасываются ещё не доходя до --gc-sections, мелкие функции "из другого файла" инлайнятся по месту и их отдельное тело выбрасывается (раз это уже вся программа, значит снаружи никто не вызовет) и т.д. Вот только некоторые проблемы возникают, если в проекте есть асм-файл и он вызывет что-то из С-файла. С точки зрения собранных в кучу С-файлов та функция не вызывается вообще, поэтому она выбрасывается из файла а_тут_собраны_все_с.o и не находится при линковке. Должно лечиться атрибутами used и externally_visible для той С-функции, которая вызывается из асм-файла, но пока не проверял, не очень зудит таким путём пытаться ещё уменьшить размер бинарника. Да, аналогичная беда должна возникать при миксе С и С++, лучше и чисто-С-шные вещи тоже обрабатывать как С++, чтобы пошло на вход одного компилятора.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Mar 5 2009, 10:07
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(ReAl @ Mar 5 2009, 02:39)  --combine --whole-program combine для того, чтобы все перечисленные в командной строе исходники собрать в один объектник (сначала объединив в один исходник) а whole-program - чтобы рассматривал это как уже законченную программу. не знаю, как на счет выбрасывания лишних функций (нет у меня пока таких), но вот инлайнинг функций из разных файлов не прокатывает с этими опциями... специально вынес содержимое главного цикла main() в другой файл в виде функции: увы, rcall как был, так и остался... или я чего-то недопонял и недоделал?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
Сообщений в этой теме
sergey sva Порядок компиляции файлов Mar 3 2009, 17:28 zltigo Цитата(sergey sva @ Mar 3 2009, 20:28) Во... Mar 3 2009, 20:25  ARV Цитата(MrYuran @ Mar 4 2009, 08:48) есть ... Mar 4 2009, 07:18    ReAl Цитата(ARV @ Mar 5 2009, 12:07) не знаю, ... Mar 9 2009, 20:05 gotty Цитата(ARV @ Mar 4 2009, 07:24) или компо... Mar 4 2009, 07:07 zltigo Цитата(ARV @ Mar 4 2009, 08:24) а позволю... Mar 4 2009, 07:59  ARV Цитата(zltigo @ Mar 4 2009, 10:59) Позвол... Mar 4 2009, 08:27   Сергей Борщ Цитата(ARV @ Mar 4 2009, 09:18) ладно, ес... Mar 4 2009, 09:10    ARV Цитата(Сергей Борщ @ Mar 4 2009, 12:10) П... Mar 4 2009, 10:24     Сергей Борщ Цитата(ARV @ Mar 4 2009, 12:24) но вопрос... Mar 4 2009, 10:50      ARV Цитата(Сергей Борщ @ Mar 4 2009, 13:50) Е... Mar 4 2009, 13:03 ARV ReAl, я делал практически точно так же, даже проще... Mar 10 2009, 05:21 ReAl Цитата(ARV @ Mar 10 2009, 07:21) опцию я ... Mar 10 2009, 07:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|