Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
|
Результаты опроса: как вы пишите?
|
|
1-ый вариант
|
  
|
11 |
28.21% |
|
второй
|
  
|
28 |
71.79% |
 |
|
многократный вызов функции. оптимизация |

07.05.2009, 04:33
|
|
Познавший АНТИЧАТ
Регистрация: 21.11.2004
Сообщений: 1,137
Провел на форуме: 2487541
Репутация:
761
|
|
многократный вызов функции. оптимизация
Вопрос чисто ради интереса.
Код:
for (int i = 0; i < someshit.count(); i++) {}
Код:
int arraySize = someshit.count();
for (int i = 0; i < arraySize; i++) {}
В первом случае метод count() вызывается Х количество раз. Во втором - один раз.
Интересует мнение людей, которые знают как это работает на более низком уровне.
Много ли различных вызовов\обращений к памяти экономит второй пример и есть ли вообще смысл оптимизировать код данным образом?
|
|
|

07.05.2009, 06:59
|
|
Постоянный
Регистрация: 27.10.2008
Сообщений: 380
Провел на форуме: 1249808
Репутация:
149
|
|
В первом случае метод count() вызывается Х количество раз. Во втором - один раз.
в вопросе и ответ, если не хочешь count() вызывать тыщу раз то стоит, проголосовал за второй вариант, хотя пишу в Делфи а там разницы нет
|
|
|

07.05.2009, 07:50
|
|
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме: 905389
Репутация:
332
|
|
второй вариант значительно будет виден когда someshit.count() будет около 1кк или больше...
смотря конечно что такое someshit если это класс а count() функция, то надо смотреть как она получает результат... тут может быть несколько споссобов
1)ф-ия в цикле считает результат и выдает...
2)в классе предусмотрена переменная для хранения этого результата, которая при каждом изменеии данных пересчитывается и сохраняется в памяти тогда count() просто считывает эту переменную и выдает её результат.
сам понимаеш если первый вариант то это очень много лишних операций для тебя... если же в классе все как во втором случае то ты всеравно на каждый шаг цикла получаеш 1-2 лишних операции...
p.s. если ты уверен что значение count() у тебя всегда будет не больше 1000 то оба споссоба для человека будут одинаковы (человек не сможет заметить разницу выполнения программ в 100-200 тактов (ну может и побольше))
|
|
|

07.05.2009, 10:41
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
Однозначно второй вариант
|
|
|

07.05.2009, 11:10
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
второй вариант, только пишу так:
Код:
for (int i = 0, arraySize = someshit.count(); i < arraySize; i++) {}
|
|
|

07.05.2009, 11:30
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Конечно второй вариант быстрее.
З.Ы.
А если ещё и цикл разложить в последовательные вызовы и таким образом избавиться от условия на каждой итерации, так вообще  Но это не твой случай, т.к. ты не знаешь count.
Единственное - умные компиляторы всё это дело оптимизируют.
З.З.Ы.
А по поводу названия опроса "Как вы пишете", я пишу как во 2м варианте, но к примеру Фаулер, в книге по рефакторингу рекомендует писать как в первом варианте, для того чтобы избавится от лишних переменных и сделать код более наглядным. Ну это правда к этапу оптимизации не относится, а делается раньше 
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
Последний раз редактировалось Qwazar; 07.05.2009 в 11:37..
|
|
|

07.05.2009, 19:06
|
|
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме: 905389
Репутация:
332
|
|
избавится от лишних переменных и сделать код более наглядным
думаю не стоит к этому прислушиваться.... ибо код надо форматировать только потому что мы не машины и если писать код в одну строчку то его сразу не понять...(очень не сразу..) но самое главное для программиста должно быть оптимизация и отсутствие багов в своем детище (не если не отсутствию, то хотябы свести все баги к минимуму...)
а наглядность это не для кода... (но если кодер ставит на первый план наглядность то это его дело)
|
|
|

07.05.2009, 19:09
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
KIR@PRO, код пишут для людей а не для компов. (Ну без фанатизма, я к тому что код должен быть понятен) В больших проектах за непонятный код надо по пальцам стучать. Представь как его потом апдейтить и багфиксить. Но по мне временные переменные - наоборот могут внести ясность, за счёт нормального имени переменной.
З.Ы.
А оптимизация это уже последний этап, когда код работает и ты по нему бегаешь профайлером, выясняя что именно стоит оптимизировать.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
Последний раз редактировалось Qwazar; 07.05.2009 в 19:12..
|
|
|

07.05.2009, 19:42
|
|
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме: 905389
Репутация:
332
|
|
дак я и говорю что элементарную табуляцию и прочее надо соблюдать, названия переменных делать понятными... это уде слишком, этож прямое принебрежение производительностью ради маленькой наглядности...
p.s. может мы просто не поняли друг друга))) я же говорил именно о том что надо избавляться от временных переменных чтоб сделать код более наглядным...
p.p.s. но это мнение каждого из нас)
|
|
|

07.05.2009, 20:15
|
|
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме: 5812656
Репутация:
1540
|
|
по-моему такого вообще не должно быть, должна быть переменная Size, которая обновляется сама собой.
проголосовал за первое, случайно.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|