Задача оптимизации: Передача параметров
От: Chez Россия  
Дата: 20.10.04 14:21
Оценка:
Приветствую всех!

Вот такой вопрос возник:
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
Re: Задача оптимизации: Передача параметров
От: Bell Россия  
Дата: 20.10.04 14:23
Оценка:
Здравствуйте, Chez, Вы писали:

C>Какой код будет отпимальнее — foo() или bar() ?

C>Структура — строго 8 байт. Как лучше передавать её: по ссылке или по значению?

С этим вопросом лучше обратиться к профайлеру
Мое ИМХО: лучше по значению.
Любите книгу — источник знаний (с) М.Горький
Re: Задача оптимизации: Передача параметров
От: genre Россия  
Дата: 20.10.04 14:40
Оценка: +2
Здравствуйте, Chez, Вы писали:

C>Какой код будет отпимальнее — foo() или bar() ?

C>Структура — строго 8 байт. Как лучше передавать её: по ссылке или по значению?
Это у вас самое критичное по скорости место в приложении? Как я вам завидую!
Точно конечно скажет профайлер, но разница будет крайне мала имхо.
... << RSDN@Home 1.1.4 beta 2 >>
Re[2]: Задача оптимизации: Передача параметров
От: denisku Россия  
Дата: 20.10.04 19:21
Оценка:
Здравствуйте, Bell, Вы писали:

B>Мое ИМХО: лучше по значению.

А обосновать? В регистр структура не влезет...
Лично мне кажеЦЦа, по ссылке лучше. Никакого копирования..
Извините за потраченный траффик..
Re: Задача оптимизации: Передача параметров
От: WinterMute Россия http://yarrr.ru
Дата: 20.10.04 20:54
Оценка:
Кажется так: скорось будет зависеть от количества операций с "ab", если их будет много, то выйгрыш будет за первым вариантом. В том примере, который ты привёл не знаю, при некоторых настройках, компилятор может сделать эту функцию инлайновой, в этом случае, подозреваю разницы вообще не будет.
... << RSDN@Home 1.1.4 @@subversion >>
Re: Задача оптимизации: Передача параметров
От: saskin http://rsdn.ru/
Дата: 21.10.04 00:45
Оценка:
Здравствуйте, 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>>
Re[3]: Задача оптимизации: Передача параметров
От: e-Xecutor Россия  
Дата: 21.10.04 05:29
Оценка:
Здравствуйте, denisku, Вы писали:

D>Здравствуйте, Bell, Вы писали:


B>>Мое ИМХО: лучше по значению.

D>А обосновать? В регистр структура не влезет...
D>Лично мне кажеЦЦа, по ссылке лучше. Никакого копирования..

Никакого копирования, зато косвенная адресация.
Уж лучше 8 байт на стэке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.