Как найти узкие места компиляции?

Как мне узнать, какие части кода компилируются долго?

Я уже использую предварительно скомпилированные заголовки для всех моих заголовков, и они определенно улучшают скорость компиляции. Тем не менее, всякий раз, когда я вношу изменения в исходный файл C ++, компиляция занимает много времени (это связано с процессором / памятью, не с привязкой к вводу-выводу - все кэшируется). Кроме того, это не связано с частью связывания, а только с частью компиляции.

Я пробовал включить / showIncludes , но, конечно, поскольку я использую предварительно скомпилированные заголовки, после stdafx.h ничего не включается. Итак, я знаю, что время компиляции требуется только для исходного кода, но я не знаю, какая его часть.

Я тоже пробовал делать минимальную сборку, но это не помогает.Как и / MP , потому что это единственный исходный файл.

Я мог бы попробовать проанализировать исходный код и выяснить, какая часть является узким местом, добавив / удалив его, но это боль и не масштабируется. Кроме того, трудно что-то удалить и при этом позволить коду скомпилироваться - сообщения об ошибках, если таковые имеются, возвращаются почти сразу.

Есть ли лучший способ выяснить, что замедляет компиляцию?

Или, если нет способа: существуют ли какие-либо языковые конструкции (например, шаблоны?), Для компиляции которых требуется намного больше времени?


] Что у меня есть в исходном коде C ++:

  • Три (относительно больших) диалоговых класса ATL (включая определения / логику).

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

  • Случайные однострочные (или аналогичные небольшие) полезные функции, например преобразователь байтового массива в шестнадцатеричный

  • Ссылки на (встроенные) классы, находящиеся в моих файлах заголовков. (Один из файлов заголовков огромен, но в нем используются лишь минимальные шаблоны и, конечно, он предварительно скомпилирован. Другой - регулярное выражение TR1 - оно огромно, но почти не используется.)

Примечание. :

Я ищу методов , которые я могу применить в более общем плане для выяснения причины этих проблем, не конкретных рекомендаций для моей очень конкретной ситуации. Надеюсь, это будет полезно и другим людям.

14
задан Thomas Eding 12 November 2011 в 21:47
поделиться