Приветствую всех!
Вот такой вопрос возник:
struct AB
{
int a;
int b;
};
int foo(AB ab)
{
return ab.a + ab.b;
}
int bar(const AB& ab)
{
return ab.a + ab.b;
}
Какой код будет отпимальнее — foo() или bar() ?
Структура — строго 8 байт. Как лучше передавать её: по ссылке или по значению?
--
Заранее благодарю
Chez, ICQ# 161095094
Здравствуйте, Chez, Вы писали:
C>Какой код будет отпимальнее — foo() или bar() ?
C>Структура — строго 8 байт. Как лучше передавать её: по ссылке или по значению?
С этим вопросом лучше обратиться к профайлеру
Мое ИМХО: лучше по значению.
Здравствуйте, Chez, Вы писали:
C>Какой код будет отпимальнее — foo() или bar() ?
C>Структура — строго 8 байт. Как лучше передавать её: по ссылке или по значению?
Это у вас самое критичное по скорости место в приложении? Как я вам завидую!
Точно конечно скажет профайлер, но разница будет крайне мала имхо.
... << RSDN@Home 1.1.4 beta 2 >>
Здравствуйте, Bell, Вы писали:
B>Мое ИМХО: лучше по значению.
А обосновать?
В регистр структура не влезет...
Лично мне кажеЦЦа, по ссылке лучше. Никакого копирования..
Кажется так: скорось будет зависеть от количества операций с "ab", если их будет много, то выйгрыш будет за первым вариантом. В том примере, который ты привёл не знаю, при некоторых настройках, компилятор может сделать эту функцию инлайновой, в этом случае, подозреваю разницы вообще не будет.
... << RSDN@Home 1.1.4 @@subversion >>
Здравствуйте, Chez, Вы писали:
C>Какой код будет отпимальнее — foo() или bar() ?
C>Структура — строго 8 байт. Как лучше передавать её: по ссылке или по значению?
VC++ 7.1 specific
в
релизе, при стандартной оптимизации обе функции разворачиваються как inline и дают одинаковый код, но поскольку оптимизация зависит от множества факторов, то речь идет только о данном примере.
в
дебаг режиме, если в структуре две переменные, которые можно поместить в стек, лучше foo(), потому как равносильна следующему коду
int foo(int a, int b)
{
return a + b;
}
foo(ab.a, ab.b)
и если структура объявленна там же, где происходит вызов функции, то при занесении параметров в стек используеться прямой адрес каждой переменной.
bar() экономит на одном параметре на стеке, но два раза теряет на вытаскивании значений по указателю.
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Здравствуйте, denisku, Вы писали:
D>Здравствуйте, Bell, Вы писали:
B>>Мое ИМХО: лучше по значению.
D>А обосновать? В регистр структура не влезет...
D>Лично мне кажеЦЦа, по ссылке лучше. Никакого копирования..
Никакого копирования, зато косвенная адресация.
Уж лучше 8 байт на стэке.