Преимущества/недостатки единства строят?

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

Ответ 1

Очень похожий вопрос и хорошие ответы здесь: # включить все .cpp файлы в единый блок компиляции?

Сводка, по-видимому, заключается в том, что меньшее преимущество ввода-вывода является основным преимуществом.

См. также The Magic Of Unity Builds, как указано в вышеупомянутом вопросе.

Ответ 2

Ли Уиндер опубликовал свой опыт с Unity Builds - Злом Unity Builds

Его вывод таков:

Единство строит. Я не люблю их.

Ответ 3

Это потому, что он сохраняет избыточную работу. Резервный синтаксический анализ и компиляция для зависимостей. Связывание также намного сложнее - вы либо экспортируете все в один объект (или несколько), либо изолируете избыточный экспорт по большинству целевых файлов объектов. Меньшее количество объектов приводит к меньшему количеству операций ввода-вывода и сокращению времени соединения. В зависимости от вашей установки включение может быть проблемой - в используемой системе "единство сборки" сборка в конечном итоге связана с ЦП и/или памятью.