Подтвердить что ты не робот

Компиляция Trace gcc и какой код замедляет ее

Я хочу узнать, какой код вызывает медленное время компиляции в gcc. Раньше у меня был скомпилированный код, и кто-то сказал мне, что переключатель командной строки делает gcc печатать каждый шаг, который он компилирует, включая каждую функцию/переменную/символ и т.д. Это очень помогло (я мог буквально видеть в консоли, где gcc дросселирует), но я забыл, что такое переключатель.

4b9b3361

Ответ 1

Я нашел его (из gcc man page):

-Q

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

Ответ 2

См. также этот ответ на довольно похожий вопрос.

Вероятно, вы захотите вызвать GCC с -time или, более вероятно, -ftime-report, который даст вам время, потраченное на cc1 или cc1plus... (собственно компилятор запускается командой gcc или g++), которая показывает время, затрачиваемое на каждую внутреннюю фазу или проходы компилятора GCC.

Вы узнаете, что для программ на C разбор - это небольшая часть времени компиляции, как только вы запрашиваете некоторую оптимизацию, например. -O1 или -O2. (Это менее справедливо для С++, когда разбор может занимать половину времени, особенно, поскольку расширение шаблона рассматривается как синтаксический анализ).

Эмпирически, что замедляет GCC, очень длинные функциональные тела. Лучше иметь 50 функций по 1000 строк каждая, чем одна функция из 50000 строк.