Evgenii Legotckoi
Evgenii Legotckoi10 октября 2018 г. 9:32

C++ - Ускоряет ли сборку #pragma once?

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

Всегда было интересно, действительно ли ускоряется сборка при использовании директивы #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.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
e
  • ehot
  • 31 марта 2024 г. 21:29

C++ - Тест 003. Условия и циклы

  • Результат:78баллов,
  • Очки рейтинга2
B

C++ - Тест 002. Константы

  • Результат:16баллов,
  • Очки рейтинга-10
B

C++ - Тест 001. Первая программа и типы данных

  • Результат:46баллов,
  • Очки рейтинга-6
Последние комментарии
k
kmssr9 февраля 2024 г. 2:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко5 февраля 2024 г. 9:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 декабря 2023 г. 18:30
Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 декабря 2023 г. 16:38
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik19 декабря 2023 г. 5:01
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
a
a_vlasov14 апреля 2024 г. 13:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев14 апреля 2024 г. 9:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex4 апреля 2024 г. 11:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
P
Pisych27 февраля 2023 г. 12:04
Как получить в массив значения из связанной модели? Спасибо, разобрался:))
AC
Alexandru Codreanu19 января 2024 г. 19:57
QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…

Следите за нами в социальных сетях