- 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.