Профилирование и оптимизация компиляции
Время компиляции моего проекта довольно длинное, и я хотел бы как можно больше уменьшить его. Тем не менее, прямо сейчас я просматриваю свой проект и стараюсь удалить компиляцию тяжелых вещей по чистой интуиции.
Я хотел бы иметь возможность профилировать мою компиляцию на каком-то уровне, которая даст мне полезную информацию, которую я могу использовать для определения того, что занимает большую часть моего времени компиляции.
Я попытался включить "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/