Я хочу узнать, какой код вызывает медленное время компиляции в gcc. Раньше у меня был скомпилированный код, и кто-то сказал мне, что переключатель командной строки делает gcc печатать каждый шаг, который он компилирует, включая каждую функцию/переменную/символ и т.д. Это очень помогло (я мог буквально видеть в консоли, где gcc дросселирует), но я забыл, что такое переключатель.
Компиляция Trace gcc и какой код замедляет ее
Ответ 1
Я нашел его (из gcc man page):
-Q
Позволяет компилятору распечатать каждое имя функции по мере ее компиляции и распечатать некоторую статистику о каждом проходе, когда она закончится.
Ответ 2
См. также этот ответ на довольно похожий вопрос.
Вероятно, вы захотите вызвать GCC с -time
или, более вероятно, -ftime-report
, который даст вам время, потраченное на cc1
или cc1plus
... (собственно компилятор запускается командой gcc
или g++
), которая показывает время, затрачиваемое на каждую внутреннюю фазу или проходы компилятора GCC.
Вы узнаете, что для программ на C разбор - это небольшая часть времени компиляции, как только вы запрашиваете некоторую оптимизацию, например. -O1
или -O2
. (Это менее справедливо для С++, когда разбор может занимать половину времени, особенно, поскольку расширение шаблона рассматривается как синтаксический анализ).
Эмпирически, что замедляет GCC, очень длинные функциональные тела. Лучше иметь 50 функций по 1000 строк каждая, чем одна функция из 50000 строк.
Ответ 3
Попробуйте выполнить компиляцию -v (verbose).
Смотрите эту ссылку:
http://www.network-theory.co.uk/docs/gccintro/gccintro_75.html
изменить:
Я понимаю. Возможно, это поможет:
gcc -fdump-tree-all -fdump-rtl-all
и т.п. (-fdump-pass). См. Здесь: http://fizz.phys.dal.ca/~jordan/gcc-4.0.1/gcc/Debugging-Options.html