Unity повышает скорость сборки по трем основным причинам. Первая причина заключается в том, что все файлы общего заголовка должны быть проанализированы только один раз. Многие проекты C ++ имеют много заголовочных файлов, которые включены в большинство или все файлы CPP, и их избыточный анализ является основной стоимостью компиляции, особенно если у вас много коротких исходных файлов. Скомпилированные заголовочные файлы могут помочь с этой стоимостью, но обычно есть много заголовочных файлов, которые не скомпилированы заранее.
Следующая основная причина того, что Unity builds улучшает скорость сборки, заключается в том, что компилятор вызывается меньше раз. При запуске компилятора есть некоторые затраты на запуск.
Наконец, сокращение избыточного синтаксического анализа заголовка означает сокращение избыточного кода для встроенных функций, поэтому общий размер объектных файлов меньше, что ускоряет связывание.
Сборки Unity также могут дать лучший код.
Сборки Unity НЕ быстрее из-за уменьшения дискового ввода-вывода. Я профилировал многие сборки с помощью xperf и знаю, о чем говорю. Если у вас достаточно памяти, то дисковый кеш ОС избежит избыточного ввода-вывода - последующие чтения заголовка будут поступать из дискового кеша ОС. Если у вас недостаточно памяти, то единственные сборки могут даже ухудшить время сборки, в результате чего объем памяти компилятора превысит доступную память и будет выгружен.
Дисковый ввод-вывод дорог, поэтому все операционные системы активно кэшируют данные, чтобы избежать избыточного дискового ввода-вывода.