Профилирование и оптимизация компиляции

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

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

Я попытался включить "Build Timing" в Visual Studio, но это не дает мне больше информации, чем время выполнения различных задач, выполняемых компилятором, зная, что большинство времени в "CL" не очень полезно.

Есть ли способ профилировать компиляцию на более низком уровне, таком как синхронизация строк или файлов?

Ответы

Ответ 1

У меня нет рекомендаций по составлению профиля для компиляции. Однако здесь несколько советов по сокращению времени компиляции:

  • Использовать прямое объявление в файле заголовка как можно больше

    В С++ классы могут быть объявлены в прямом выражении, если вам нужно только использовать тип указателя на этот класс (поскольку все указатели объектов одинаковы размер, и это то, о чем компилятор заботится). (источник: http://en.wikipedia.org/wiki/Forward_declaration)

  • Кроме того, использование идиомы Pimpl поможет вам, разрешив компилятору перекомпилировать только часть, которую вы изменили. http://en.wikipedia.org/wiki/Opaque_pointer

  • Избегайте включенного файла catch-all, который содержит весь включенный файл библиотеки, и включайте только те заголовки, которые вам действительно нужны.

Ответ 2

Вы должны попробовать делить свой код на отдельные файлы столько, сколько сможете. Я не использую визуальную студию, поэтому я не знаю точно, как они справляются с этим, но вот хорошее руководство для того, почему и как http://www.cplusplus.com/forum/articles/10627/