Как прекомпилированный заголовок сокращает время компиляции - PullRequest
4 голосов
/ 28 ноября 2011

Некоторое время я использовал предварительно скомпилированный заголовок и мне сказали (и увидели), как они могут сократить время компиляции. Но мне бы очень хотелось узнать, что происходит (под капотом), чтобы ускорить мою компиляцию.

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

Так как же предварительно скомпилированный заголовок ускоряет мою компиляцию?

Ответы [ 4 ]

4 голосов
/ 28 ноября 2011

С http://gamesfromwithin.com/the-care-and-feeding-of-pre-compiled-headers Спасибо (@Pablo)

Компилятор C ++ одновременно работает с одним модулем компиляции (файл cpp).Для каждого файла применяется предварительный препроцессор (который выполняет все операции включения и «запекает» их в сам файл cpp), а затем компилирует сам модуль.Перейдите к следующему файлу cpp, промойте и повторите.Ясно, что если несколько файлов содержат один и тот же набор дорогих заголовочных файлов (больших и / или включающих в себя много других заголовочных файлов по очереди), компилятор будет прилагать много усилий.

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

2 голосов
/ 28 ноября 2011

Обычно заголовочный файл компилируется один раз для каждой единицы перевода (.cpp файл), в которую он включен. Использование предварительно скомпилированного заголовка экономит время, используемое для многократной компиляции включаемого файла. Это действительно полезно, когда файл заголовка, который нужно предварительно скомпилировать, очень большой (или косвенно включает много других файлов заголовка).

1 голос
/ 28 ноября 2011

Много лет назад у меня был доступ к компилятору C, который распечатывал количество обработанных им строк (Watcom C версии 6 или около того).Компиляция файлов с менее чем 100 строками кода C будет отображать количество строк 5000 или даже 10000 строк.Все из которых были включены.Другими словами, включенный код полностью доминирует во время компиляции.Так что все, что вы можете сделать, чтобы уменьшить это, будет полезно.Вы можете убедиться в этом с помощью компиляторов, которые позволяют отключить предварительную обработку: сравните время полной сборки системы с ней и без нее.

0 голосов
/ 28 ноября 2011

Я думаю, что «предварительно скомпилированный» говорит о том, как он ускоряет компиляцию.Вы можете прочитать об основной концепции здесь, я думаю:

http://en.wikipedia.org/wiki/Precompiled_header

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...