Почему использование предварительно скомпилированных заголовков в GCC медленнее - PullRequest
0 голосов
/ 17 февраля 2019

Я пытался использовать предварительно скомпилированные заголовки с GCC, чтобы ускорить одну из моих сборок.Это проект с 80 файлами, большинство из которых содержат один заголовок, который я предварительно скомпилировал.Этот заголовок включает в себя большое количество других заголовков.По крайней мере, на бумаге это похоже на хороший вариант использования PCH.

При использовании clang я получаю ожидаемое ускорение, которое примерно в 2 раза быстрее.Однако на gcc компиляция занимает значительно больше .

. Я храню свои PCH в отдельном каталоге и пробовал как добавить каталог с -I, так и указать PCH напрямую с-include (это не сработало: в итоге gcc включил как PCH, так и обычный заголовок).PCH компилируются с теми же параметрами, что и исходные файлы.

Без PCH компиляция занимает около 13 секунд.С PCH это занимает около 18 секунд.С помощью -H и -Winvalid-pch я подтвердил, что gcc (только) включает в себя предварительно скомпилированный заголовок.Полный вывод -H для одного файла выглядит следующим образом:

! .bake_cache/x64-Linux-debug/include/corto.h.gch
 ./src/lang/boolean.c

! должен указывать, что gcc успешно загрузил pch:

-H Распечататьимя каждого используемого файла заголовка, в дополнение к другим обычным действиям.Каждое имя имеет отступ, чтобы показать, насколько глубоко оно находится в стеке #include.Предварительно скомпилированные заголовочные файлы также печатаются, даже если они признаны недействительными;неверный предварительно скомпилированный заголовочный файл печатается с «... x», а действительный с «...!».

От: https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

Я в растерянности.Кажется, что gcc может найти и использовать PCH, но все же занимает больше времени.Есть идеи, что может быть причиной этого?

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