Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объекты функций обычно работают быстрее функций, Так говорит Джосьютис в своей книге... 
:(
    Опции темы
W4FhLF
Дата 17.12.2012, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



mes, интересно... а что будет если туда написать lambda function?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
borisbn
Дата 17.12.2012, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(W4FhLF @  17.12.2012,  12:05 Найти цитируемый пост)
интересно... а что будет если туда написать lambda function? 

то же, что и функтором - http://liveworkspace.org/code/DAqxc$7


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alca
Дата 17.12.2012, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Даже с:
Код

#define ALWAYS_INLINE inline __attribute__((__always_inline__))


Цитата

stdout: 
func : 275 ms
functor : 196 ms
lambda : 191 ms
z : 189 ms


http://liveworkspace.org/code/1M9JFU$0


--------------------
PM WWW ICQ Skype Jabber   Вверх
volatile
Дата 17.12.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Вообще-то, то что вызовы разные, у меня и не вызывало никогда сомнений.
Да хотя бы потому что Функтор - это _thiscall, Функция - это _cdecl
Можно конечно смотреть асемблерный код, и выщитывать такты.
Но это уже чисто академический интерес.

А в то время для меня вопрос звучал примерно так:
Вызов функции и функтора - безусловно разные вызовы, и нужно выяснить какой из них быстрее, чтобы использовать на приктике
ответ на это вопрос я получил (чем кстати и поделился).


PM MAIL   Вверх
mes
Дата 17.12.2012, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(volatile @  17.12.2012,  12:33 Найти цитируемый пост)
хотя бы потому что Функтор - это _thiscall, Функция - это _cdecl

только вот фокус в том, что используя в функторе ту самую функцию, выполняться сортировка будет быстрей, нежели с переданной функцией smile

Добавлено через 7 минут и 35 секунд
Цитата(W4FhLF @  17.12.2012,  11:05 Найти цитируемый пост)
а что будет если туда написать lambda function? 

лямбда по идеи более легка к оптимизации, и без захвата, представляет собой наипростейший вариант, без проблем конвертируемый в обычную функцию..

Добавлено через 9 минут и 10 секунд
Цитата(volatile @  17.12.2012,  12:33 Найти цитируемый пост)
безусловно разные вызовы, и нужно выяснить какой из них быстрее, чтобы использовать на приктике

сорри, я подумал, что все ж также интересно в чем лежит эта разница, чтоб можно было не бездумно, а аргументировано применять на приктике  smile 

Это сообщение отредактировал(а) mes - 17.12.2012, 18:58


--------------------
PM MAIL WWW   Вверх
Alca
Дата 17.12.2012, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Надо разобрать асм код, делов то


--------------------
PM WWW ICQ Skype Jabber   Вверх
borisbn
Дата 17.12.2012, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



ждём пока на LWS появится такая возможность. boostcoder обещал


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 17.12.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(mes @  17.12.2012,  18:58 Найти цитируемый пост)
 я подумал, что все ж также интересно в чем лежит эта разница, чтоб можно было не бездумно, а аргументировано применять на приктике   

mes, , это называется инкапсуляция.  smile
всмысле, не забивать голову всякой ерундой.
(пусть над этим думают разработчики компиляторов. это их приватная часть.)

Да, в конце концов, там не такая уж принципиальная разница.
Так ли уж важны эти проценты?


PM MAIL   Вверх
W4FhLF
Дата 17.12.2012, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



В действительности, общее объяснение и понимание более ценны, нежели частные субъективные тесты. Обычно, конечно, всё начинается с тестов, но то, что докопались до сути -- хорошо. 

Это сообщение отредактировал(а) W4FhLF - 17.12.2012, 23:54


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
volatile
Дата 18.12.2012, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(W4FhLF @  17.12.2012,  23:40 Найти цитируемый пост)
 частные субъективные тесты

W4FhLF, Мне очень жаль, что тесты не совпали с вашими ожиданиями...
сорри, если что...

PM MAIL   Вверх
mes
Дата 18.12.2012, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(volatile @  17.12.2012,  22:17 Найти цитируемый пост)
всмысле, не забивать голову всякой ерундой.

не забивать ее можно по разному.. можно проведя тесты придти к выводу, что функция - зло, и везде использовать функторы. 
а можно разобраться, что дело не в функции, а в способе е передачи, и спокойно,  не забивая голову тестами и предрасудками, использовать и тех и других подходящим образом.. 



--------------------
PM MAIL WWW   Вверх
vinter
Дата 19.12.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



mes, отличная идея. Когда меня спросили по поводу этой разницы я сразу отверг её, т.к. забыл о разнице в передаче. Поэтому слова Джосьюттиса и Майерса являются верными для своего времени. Но это не совсем верно для современности, где компиляторы могут встроить подобную конструкцию. Никто не мешает встроить алгоритм STL после чего пропадет всякое взятие адреса и функция может быть встроена.
Поэтому получается, что в общем случае функторы могут быть быстрее, но это далеко не обязательно. Использование шаблонных функций вполне может быть встроено, так же как и функтор.

Не знаю, может быть это влияние перевода, но, по факту, в издании 2012 года он менее категоричен:
Цитата

The concept of templates using usually allows better optimization because more details are defined at compile time. Thus, passing function objects instead of ordinary functions often results in better performance.


Это сообщение отредактировал(а) vinter - 19.12.2012, 14:12


--------------------
Мой блог
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 19.12.2012, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Справедливости ради стоит привести и слова Джосьютиса из русского издания:
Цитата

Объекты функции обычно работают быстрее функций. Шаблоны обычно лучше оптимизируются, поскольку на стадии компиляции доступно больше информации. Следовательно, передача объекта функции вместо обычной функции часто повышает быстродействие программы.


PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.