Лиза Сафронова
Лиза Сафронова

Микрооптимизация C++: Как лучше передать в функцию значение, на единицу большее, чем значение некоей переменной? (см. вн)

y = fun(++x)

или

y = fun(x+1)

Я в курсе, что при этом значение переменной x будет разным, но в данном конкретном случае это несущественно.

Даша Хандурина
Даша Хандурина

#include

int foo(int x) {
return x + 1;
}

int main() {
int x = 0;

std::cin >> x;
std::cout << foo(x + 1) << std::endl;
std::cout << foo(++x) << std::endl;
}

Отключаем inline, всю остальную оптимизацию оставляем, смотрим дизассемблер:

std::cout << foo(x + 1) << std::endl;
00FB144B mov ecx,dword ptr [x]
00FB144E push dword ptr ds:[0FB3048h]
00FB1454 lea ecx,[ecx+1]
00FB1457 call foo (0FB1420h)
...
std::cout << foo(++x) << std::endl;
00FB1471 mov ecx,dword ptr [x]
00FB1474 push dword ptr ds:[0FB3048h]
00FB147A inc ecx
00FB147B mov dword ptr [x],ecx
00FB147E call foo (0FB1420h)

В первом случае три инструкции до вызова функции foo, во втором четыре. Вывод?

Вы не там пытаетесь оптимизировать. Как правило, причина медленной работы программы -- херовый алгоритм обработки данных. А ускорение такого херового алгоритма на несколько микросекунд, ничего не даст.

Похожие вопросы
Как передать функции больше 2х аргументов? (C++)
Какая функция переводит значение переменных веществ типа в строки?
Что такое значение переменой? Как указать значение переменной ?
C#. Написать функцию с переменным числом параметров
C++ Как передать структуру в функцию по ссылке?
Как функция и ее переменные отображаются в памяти? Что происходит с функцией после возврата значения?
Как передать значение переменной из 1.php в 2.php?
C++ замена значений переменных
Составление программ с использованием функций, передающих значения через глобальные переменные (С++)
C# Присвоение значения переменным foreach