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