savostin
@savostin
Еще один программист

Увеличение скорости компиляции?

Захотелось как-то ускорить компиляцию C++ проекта, который уже разросся до чего-то приличного.

Хотелось бы услышать от опытных товарищей как какие-то советы как по организации проекта/кода (например не использовать boost), так и что в первую очередь из железа влияет на скорость компиляции (частота CPU, производитель, скорость или объем памяти, скорость жесткого диска, его дефрагментированность, свободное место, файловая система, сильно ли ускоряет (именно компиляцию) SSD и т.д.). Есть ли смысл отключать антивирус во время сборки? Может есть какие-то шаманства, о которых я даже не догадываюсь? :)

Windows, Visual Studio, если важно, но и Linux, да и платформонезависимые параметры тоже интересны.
  • Вопрос задан
  • 10125 просмотров
Пригласить эксперта
Ответы на вопрос 6
bogolt
@bogolt
SSD по идее влиять не должен, потому что узкое место процессор а не диск. Экспериментировал, кидал проект в tmpfs ( файловая система в оперативке ) — скорость сборки не менялась. Впрочем возможно на больших проектах разница будет но вряд ли значительная.
Если процессор многоядерный — скажите системе сборки чтобы использовала побольше этих самых ядер ( make -j N ( где N — 1.5 * количество ядер ) ).
Ответ написан
Evengard
@Evengard
Антивирус (как минимум Microsoft Essentials) отключать есть смысл — он любит совершать затыки на мелких файлах, существенно понижая I/O.

Под Линуксом, если часто перекомпилите, могу только посоветовать ccache.
Ответ написан
volkodavua
@volkodavua
Ну для начала установите до Visual Studio Intel Parallel Studio вырастет как скорость компиляции так и работы самой программы на многоядерных процессорах.
Ответ написан
@gribozavr
1. Используйте clang.
2. Используйте PCH.
3. Если у вас используется много шаблонов, то компилируйте в release (компиляция в debug медленнее чем в release из-за большого I/O для огромных размеров отладочной информации для всех инстанцированных шаблонов)
4. SSD ускоряет компиляцию. Но ещё больше ускоряет компиляцию *много* RAM (минимум 1Gb на ядро для собственно компилятора, а остальное уходит на дисковый кеш).
5. Если вас интересует ускорение инкрементальной сборки — посмотрите на CMake + ninja. Это намного ускоряет инкрементальную компиляцию (если изменились пара .cpp файлов).
Ответ написан
Комментировать
@rtorsten
Наиболее универсальное средство — параллельная сборка, если она еще не используется. В MSVC в свойствах проекта — multiprocessor compilation. Для make и большинства других систем сборки флаг -j<количество параллельных сборок>, которое обычно равно количеству процессоров/ядер.

Так же еще на stackoveflow есть подобный вопрос.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
покупаете топовый процессор, берете памяти гига 32 и диск ссд и радуетесь, ну компилите ещё в опциями релиз, а не дебаг.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы