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

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

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

Моя сборка слишком медленная, я уже использую RAMdisk для временных файлов VС++, и это не имеет никакого значения. (У меня SSD, поэтому я не ожидал разницы.)

Большинство отдельных файлов С++ в этом проекте занимают ок. 2 секунды для компиляции, которые кажутся ужасными (поскольку у меня также нет параллелизма в проекте, потому что я использую VS2005).

Как я могу это оптимизировать? Не оптимизируйте без профилирования, но как я могу профилировать компилятор?

Примечание. Это было не очень полезно:


Добавьте хороший комментарий: у вас много шаблонов? Насколько велики ваши файлы в среднем? Вы проверили, включив только минимум необходимых заголовков.

Нет, я этого не сделал. Конечно, я мог (и, конечно же, будет). Я могу найти что-то, но это все умозрение и пробная версия и ошибка!

"Все" сообщают вам, что вы должны оптимизировать только после измерения/профилирования, но при оптимизации времени компиляции мы возвращаемся к пробной и ошибке?


Примечание: предлагаемый "взломать" из комментариев с помощью __TIME__ не работает, по крайней мере, не на Visual С++, потому что (как документы): самое последнее время компиляции текущего исходного файла. Время представляет собой строковый литерал формы hh: mm: ss. - Думаю, можно было бы, по крайней мере, получить тайминги для отдельных единиц компиляции с этой маркой, но это не поможет развернуть блок компиляции.

4b9b3361

Ответ 1

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

Ответ 2

Существует несколько способов оптимизации времени компиляции:

  • Используйте предварительно скомпилированный заголовок. Если вы используете Visual С++, используйте "stdafx.h". По умолчанию "stdafx.h" установлен как предварительно скомпилированный заголовок, но я бы рекомендовал вам проверить это, чтобы убедиться, что оно есть.

  • Использовать Linux:). Если вам не нужно использовать Windows для того, что вы делаете, я рекомендую использовать Linux. Время компиляции на нем намного лучше. Некоторые из причин: ext4 на 40% быстрее, чем NTFS в среднем, и имеет лучший планировщик процессов. Когда дело доходит до процессорных операций, Linux обычно делает это ~ x1.8 - x2 раз быстрее, а компиляция зависит от процессора.

  • Используйте другой компилятор. Известно, что Clang/LLVM имеет лучшие скорости компиляции, а также поддерживает предварительно скомпилированные заголовки.