Evgenii Legotckoi
10 жовтня 2018 р. 19:32

C ++ - Чи прискорюється процес створення #pragma?

Робота над великим проектом дозволяє в деяких випадках перевірити деякі теорії щодо мови програмування.

Завжди було цікаво, чи прискорюється збірка при використанні директиви #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.

Рекомендовані статті на цю тему

По статті запитували0питання

1

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…