Использование аргументов функции напрямую против создания локальных переменных

Рассмотрим эти две реализации функции:

double MyFoo::foo(std::vector<double> & v){
double f1 = v.at(1);
double f2 = v.at(2);
double f3 = v.at(3);
double f4 = v.at(4);
double f5 = v.at(5);
double f6 = v.at(6);

double ret = sin(f1)+ sin(f2)+ sin(f3)+ sin(f4)+ sin(f5)+ sin(f6)+ sin(f7);
return ret;
}

а также

double MyFoo::foo(std::vector<double> & v){
double ret = sin(v.at(1))+ sin(v.at(2))+ sin(v.at(3))+ sin(v.at(4))+ sin(v.at(5))+ sin(v.at(6))+ sin(v.at(7));
return ret;
}

Есть ли заметная разница (если есть) в время исполнения из этих функций? Вводят ли эти локальные переменные вычислительные накладные расходы или компиляторы обрабатывают бесполезные локальные переменные?

Постскриптум Выбор sin() совершенно произвольно. Мой вопрос сосредоточен на локальных переменных, а не на операциях, происходящих внутри.

2

Решение

На самом деле, не создавая систему, которая делает это, я бы догадался, что разницы нет вообще. А также sin в любом случае, как правило, занимает довольно много времени, поэтому вполне вероятно, что любая незначительная оптимизация, связанная с использованием локальных переменных и т. д., очень незначительна.

Я ожидаю, что большинство «хороших» компиляторов (gcc, Microsoft и т. Д.) Оптимизируют любую локальную переменную, которая не используется широко, и выдают точно такой же код.

Но, как я сказал, на самом деле, не пытаясь использовать оба метода, трудно сказать наверняка [И я бы убрал вызов sin также, поскольку это может «скрыть» любые незначительные различия между двумя вариантами — просто добавление 6 двойных значений будет лучшим решением].

Если производительность (в частности, для этой функции) имеет существенное значение, создайте контрольный показатель. Но также, прежде чем вы начнете «связываться» с функциями, убедитесь, что вы знаете, какие функции занимают большую часть времени в вашем коде. Нет смысла сбрасывать два такта с функции, которая запускается несколько десятков раз, когда все время выполнения составляет несколько часов (столько миллиардов циклов).

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector