Как ускорить время компиляции g ++ (при использовании большого количества шаблонов) - PullRequest
62 голосов
/ 03 августа 2010

Этот вопрос, возможно, как-то странный, но как я могу ускорить время компиляции g ++?Мой код на C ++ интенсивно использует boost и шаблоны.Я уже переместил как можно больше из заголовочных файлов и использую опцию -j, но все же требуется много времени для компиляции (и ссылки).

Существуют ли какие-либо инструменты для анализа моего кода иуказать узкие места для компилятора?Или можно как-то профилировать компилятор, работающий на моем коде?Это было бы очень приятно, потому что иногда у меня складывается впечатление, что я слишком много времени смотрел на журнал консоли компилятора ...

Ответы [ 11 ]

0 голосов
/ 03 августа 2010

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

Если у вас 52 исходных (.cc) файла, каждый из которых #include 47 #include (.h), вы собираетесь загрузить компилятор 52 раза и пропустить 2496 файлов.В зависимости от плотности комментариев в файлах, вы можете потратить немало времени на употребление бесполезных символов.(В одной организации, которую я видел, заголовочные файлы варьировались от 66% до 90% комментариев, и только 10% -33% файла были «значимыми». Единственное, что можно было сделать, чтобы улучшить читаемость этих файлов, было раздеться.каждый последний комментарий, оставляя только код.)

Посмотрите, как физически организована ваша программа.Посмотрите, можете ли вы объединить исходные файлы и упростить иерархию файлов #include.

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

...