Вы должны проанализировать, почему у вас замедление работы с переменными, вероятно, лучше всего, посмотрев на созданный ассемблер, обычно это с опцией -S
для компилятора.
Может бытьЕсть много причин для ускорения, если у вас есть константы:
- небольшие целочисленные константы могут переходить к немедленным операциям сборки
- Компилятор может выполнять развертывание цикла
- там можетбудьте особыми арифметическими приемами, если константа имеет степень 2
С другой стороны, вы можете получить замедление, если передаете указатель на const
в вашу функцию, и компилятор не может исключить, что вашconst
квалифицированный объект является псевдонимом.const
только говорит, что вы не имеете права изменять значение, но компилятор не может знать, изменилось ли оно неожиданно.Здесь может помочь объявление указателя с помощью restrict
.
Так что определите проблемные места, сравните их в ассемблере с двумя разными версиями (константы и const
квалифицированные переменные) и попытайтесь найти причину замедления.
Используйте inline
, чтобы аккуратно оптимизировать проблемные места.
Если больше ничего не помогает, и если вам удастся правильно его локализовать, вы можете даже написать сценарий, производящий эту функциюс буквальными константами и скомпилируйте этот маленький кусочек кода перед каждым запуском.Если ваши пробеги длинные, вполне возможно, что компиляция и перекомпоновка окупятся.