Удалить специфичный для компилятора код из заголовков - PullRequest
0 голосов
/ 23 февраля 2011

кажется, что большая часть кода в boost - это обходные пути для конкретных компиляторов или разные пути для разных компиляторов (особенно в таких компонентах, как mpl).Мое время сборки значительно увеличивается, когда я использую boost, даже когда я пытаюсь скрыть большие части за брандмауэрами компилятора (PIMPL) или использовать предварительно скомпилированные заголовки.

Есть ли способ предварительной обработки заголовков повышения дляодин компилятор я на самом деле использую?Я подозреваю, что все, что делает заголовки (значительно?) Меньше, будет иметь некоторое влияние.Кто-нибудь когда-нибудь проверял, будет ли это действительно улучшать скорость?

Не знаю, имеет ли это большое значение для реального ответа, но я использую Visual Studio 2010 в первую очередь.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

Если вы используете предварительно скомпилированные заголовки, то это предварительная обработка заголовков на стероидах.Если PCH не будет иметь значения, то вы ничего не сможете сделать.

Время компиляции, вероятно, зависит от чрезмерного включения или сложных экземпляров шаблона, а не от размера или сложности препроцессора.

4 голосов
/ 23 февраля 2011

Я подозреваю, что все, что делает заголовки (значительно?) Меньше, будет иметь некоторое влияние.

Я думаю, что после того, как вы это сделаете, вы будете разочарованы.В сложных библиотеках шаблонов, таких как boost, больше всего времени занимает не предварительная обработка, а анализ, инстанцирование и оптимизация шаблонов.

Вы можете провести эксперимент, который покажет вам верхний предел того, что вы можете получить таким образом:

  • изменить настройки сборки так, чтобы исходные коды не компилировались, а только предварительно обрабатывались (т. Е. Добавлялся переключатель / P / EP - Properties / C / C ++ / Preprocess to File = Yes)
  • rebuildВаш проект и время, сколько это займет

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

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

...