- 1. Входные данные
- 2. Результат
Работа над крупным проектом позволяет в некоторых случаях проверить некоторые теории, касающиеся языка программирования.
Всегда было интересно, действительно ли ускоряется сборка при использовании директивы #pragma once , вместо классического #ifndef #define #endif.
Проверить это ускорение на маленьком проекте довольно проблематично, ведь если проект собирается в среднем за 20 секунд, то и ощутимого ускорения мы скорее всего не увидим, поскольку длительность сборки всегда будет плавать от 17 до 23 секунд.
Но у меня выдалось свободное время и удалось проверить эту теорию на крупном проекте.
Входные данные
Что имеем:
- Вопрос: Изменится ли скорость сборки проекта при изменении всех #ifndef #define #endif, в заголовочных файлах на #pragma once
- Чтобы это проверить, нужно заменить дефайны на pragma once в 4874 заголовочных файлах
- Компилятор MSVC 2017
Чтобы не быть голословным, вот скриншот коммита из Tortoise Git, в котором указаны изменения в 4874 файлах
Для исправления всех файлов я написал python скрипт, я не враг самому себе, чтобы исправлять все эти файлы вручную. Конечно не всё прошло гладко и пришлось кое-что поправить, но в данном случае это было не так много работы.
Результат
В итоге я не увидел разницы.
До изменения проект компилировался 15 минут 52 секунды в среднем .
После изменения проект компилировался 15 минут 50 секунд в среднем .
Если некоторые компиляторы и делают оптимизацию, то это нужно включать специальными флагами. По факту лобовое изменение не даёт никакого увеличения скорости сборки.
Если у вас был обратный опыт, отпишитесь пожалуйста, и скажите, как добились ускорения сборки с #pragma once.