Анализ влияния ключевого слова final на производительность программ C++

Бенджамин Саммертон (Benjamin Summerton), автор системы трассировки лучей PSRayTracing, проанализировал влияние на производительность приложений использование в коде на языке С++ ключевого слова "final", появившегося в стандарте C++11. Причиной проведения тестирования послужили витающие в сети заявления, что использование "final" позволяет повысить производительность, которые ограничивались оценочными суждениями без указания результатов изменений.

Проведённое Бенджамином тестирование показало, что производительность при использовании "final" сильно зависит от компилятора. При сборке в GCC действительно в заметном числе случаев производительность возрастала, но при сборке в Clang и MSVC производительность в большинстве случаев снижалась, причём более ощутимо. При этом большое влияние, кроме компилятора, имела платформа, например, проседание производительности больше проявлялись на системе с CPU AMD Ryzen 9 6900HX, чем на системе с CPU Apple M1.





Например, на системе AMD Ryzen 9 6900HX с Ubuntu 23.10 при сборке в Clang в 90% тестов при использовании "final" наблюдалось замедление работы как минимум на 5%, но в 2.5% случаев фиксировалось ускорение как минимум на 5%. Для GCC замедление на 5% фиксировалось в 0.9% случаев, а ускорение на 5% - в 15.8% случаев. В MSVC 5% замедление наблюдалось в 26.2% тестов, а 5% ускорение - 13.3%. Для себя автор исследования сделал вывод о необходимости избегать использование "final".

Источник: https://www.opennet.ru/opennews/art.shtml?num=61051