1eqinfinity
@1eqinfinity
sound design, music, DSP

Глобальные переменные или частое пересоздание локальных?

Добрый день.
Имеется функция, вызываемая несколько тысяч раз в секунду.
В теле функции и только в ней используется 4 переменных (тип double), значение которых не зависит ни от других функций, ни от предыдущих вызовов данной функции. Иными словами, по сути это локальные переменные, хранящие временные значения.
Улучшит ли производительность использование глобальных переменных вместо частого перевыделения памяти?

Спасибо за ответы!
  • Вопрос задан
  • 2604 просмотра
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Если это переменные примитивного типа, а не экземпляры класса с нетривиальным деструктором и конструктором, улучшения не будет.

И да, локальные переменные временного характера (особенно, объявленные const) оптимизатор скорее всего просто вышвырнет из готовой программы, а вот с глобальными такой трюк может и не пройти.

Далее, в случае, если это классы, их не нужно делать глобальными, а нужно передавать в функцию по константной ссылке.

И да, заниматься такого рода оптимизацией следует только после того, как выявлена реальная проблема с производительностью.
Ответ написан
Комментировать
ErmIg
@ErmIg
Программист
Если используются 4 временных переменных типа double - это 32 байта. При частом их использовании они будут лежать в кеше процессора, если даже не в его регистрах. Если вы их сделаете глобальными никакого выигрыша не будет, если только там нет какого-нибудь сложного алгоритма их инициализации. Но при наличии глобальных переменных есть очевидный минус - при много поточном использовании вашей функции могут возникнуть большие проблемы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Vinatorul
@Vinatorul
Developer
Ну тут ещё вопрос в том, что это за переменные, если это объекты, которые каждый раз пересоздаются, то это не очень хорошо, и тогда лучше их создать один раз, а в вашей функции просто переинициализировать.
Если функция - метод класса, то можно вынести эти локалки в поля класса.
Если совсем хочется, то можно создать локалку внутри .cpp файла, которую не будет видно снаружи, но будет видно внутри файла.
Ответ написан
Комментировать
maaGames
@maaGames
Погроммирую программы
А потом ты решишь распараллелить выполнение этих функций и ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы