![]() |
|
Модераторы: bsa |
![]()
|
|
| mrgloom |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
оптимизируется ли компилятором код
или надо
|
||||
|
|||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 2 Всего: 12 |
вектор "знает" о своем размере, vec.size() не считает а всего лишь возвращает значение поєтому накладные расходы не большие, а читаемость кода лучше.
Добавлено через 1 минуту и 37 секунд Такое навряд ли оптимизируется компилятором, откуда компилятору знать, что надумает вернуть метод класса |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
mrgloom, если вектор (вернее его размер) в цикле изменяется, то стОит делать i < vec.size(). В противном же случае - как нравится. Я, например, завожу переменную (типа size у тебя). Так проще отлаживаться - остановился на breakpoint'е и смотришь эту переменную...
на вкус и цвет... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| asmdzen |
|
||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
triclosan, вот что я нашел в stl_vector.h
если размер достаточно большой - получится довольно много вычислений. обычно когда не имеет значения я прохожу контейнеры в обратном направлении, типа
|
||||
|
|||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
||||
|
||||
| asmdzen |
|
||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
это уже просто vector.h, поскольку функция написана прямо в классе то я думаю получится прямое обращение к переменной _Mysize класса vector, значит оптимизация есть. что именно не понятно? если использовать
то метод size() будет вызван только один раз. |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
ээээххххх, опоздал я. хотел то же самое сказать. ну, тогда, просто +1 за итераторы -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
на gcc-4.5.2, этот код:
генерируется в такой ассемблер:
в esi лежит размер. как не сложно заметить, vector::size() в цикле не вызывается. |
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
хммм. а если в цикл вставить
? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
скажу даже больше: как показывает практика, gcc компиляторы в условии цикла не вызывают функцию/метод, а вызывают ее/его один раз при инициализации.
Добавлено через 25 секунд чичас |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
хочу лишь добавить, что такая функция (функция, которая не изменяет своего значения при вызовах с одним и тем же агрументом) называется чистой (pure) и разумеется компилятор впервую очередь выносит ее за цикл..
у gcc есть расширение, которое позволяет принудительно объявить функцию чистой, на случай если вы не доверяете компилятору.. -------------------- undefined |
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
а тут все еще интересней
код:
получилось такое:
в esi размер. ebx - индекс. ну, выскажите свое мнение относительно плохого оптимизатора Добавлено через 2 минуты и 5 секунд вот:
Добавлено через 3 минуты и 47 секунд ааа, она уже есть выше) и никакого pure. |
||||||
|
|||||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
Это сообщение отредактировал(а) fish9370 - 21.6.2011, 14:49 -------------------- undefined |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
fish9370, я в курсе.
я вам показал, что никакого pure у метода size() нет. |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
повторяю, его нет потому-что компилятор ее (функцию) и так определяет как чистую.. это ответ на вопрос топикстартера.. -------------------- undefined |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
fish9370, твоя цитата к классам не относится.
Это сообщение отредактировал(а) bsa - 21.6.2011, 15:07 |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
-------------------- undefined |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
к чему тогда приведена цитата? а на основании чего компилятор принимает решение о том что она чистая? и как он может это сделать, если к примеру, он видит только декларацию(не в этом примере)? |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
ну, это применять я никого не обязываю, это было приведено в позновательных целях.. суть от этого не меняется.. PS, может я вам кайф обламал, а вы хотели еще погадать на ассемблерной гуще? - тогда я прошу прощения.. а вообще бы плюсонуть не помешало бы.. -------------------- undefined |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
непонятно почему две разные версии, но может из-за того что функции inline и получается оптимизация с регистрами? boostcoder, я так понимаю после цикла значение esi все же сохраняется в переменную vector'а? Это сообщение отредактировал(а) asmdzen - 21.6.2011, 15:33 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
boostcoder, той что идет с VC 2008
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
asmdzen, а разве тогда еще использовались расширения файлов у STL ? по моему нет...
|
|||
|
||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 2 Всего: 12 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |