![]() |
многократный вызов функции. оптимизация
Вопрос чисто ради интереса.
Код:
for (int i = 0; i < someshit.count(); i++) {}Код:
int arraySize = someshit.count();Интересует мнение людей, которые знают как это работает на более низком уровне. Много ли различных вызовов\обращений к памяти экономит второй пример и есть ли вообще смысл оптимизировать код данным образом? |
Цитата:
|
второй вариант значительно будет виден когда someshit.count() будет около 1кк или больше...
смотря конечно что такое someshit если это класс а count() функция, то надо смотреть как она получает результат... тут может быть несколько споссобов 1)ф-ия в цикле считает результат и выдает... 2)в классе предусмотрена переменная для хранения этого результата, которая при каждом изменеии данных пересчитывается и сохраняется в памяти тогда count() просто считывает эту переменную и выдает её результат. сам понимаеш если первый вариант то это очень много лишних операций для тебя... если же в классе все как во втором случае то ты всеравно на каждый шаг цикла получаеш 1-2 лишних операции... p.s. если ты уверен что значение count() у тебя всегда будет не больше 1000 то оба споссоба для человека будут одинаковы (человек не сможет заметить разницу выполнения программ в 100-200 тактов (ну может и побольше)) |
Однозначно второй вариант
|
второй вариант, только пишу так:
Код:
for (int i = 0, arraySize = someshit.count(); i < arraySize; i++) {} |
Конечно второй вариант быстрее.
З.Ы. А если ещё и цикл разложить в последовательные вызовы и таким образом избавиться от условия на каждой итерации, так вообще :) Но это не твой случай, т.к. ты не знаешь count. Единственное - умные компиляторы всё это дело оптимизируют. З.З.Ы. А по поводу названия опроса "Как вы пишете", я пишу как во 2м варианте, но к примеру Фаулер, в книге по рефакторингу рекомендует писать как в первом варианте, для того чтобы избавится от лишних переменных и сделать код более наглядным. Ну это правда к этапу оптимизации не относится, а делается раньше :) |
Цитата:
а наглядность это не для кода... (но если кодер ставит на первый план наглядность то это его дело) |
KIR@PRO, код пишут для людей а не для компов. (Ну без фанатизма, я к тому что код должен быть понятен) В больших проектах за непонятный код надо по пальцам стучать. Представь как его потом апдейтить и багфиксить. Но по мне временные переменные - наоборот могут внести ясность, за счёт нормального имени переменной.
З.Ы. А оптимизация это уже последний этап, когда код работает и ты по нему бегаешь профайлером, выясняя что именно стоит оптимизировать. |
дак я и говорю что элементарную табуляцию и прочее надо соблюдать, названия переменных делать понятными... это уде слишком, этож прямое принебрежение производительностью ради маленькой наглядности...
p.s. может мы просто не поняли друг друга))) я же говорил именно о том что надо избавляться от временных переменных чтоб сделать код более наглядным... p.p.s. но это мнение каждого из нас) |
по-моему такого вообще не должно быть, должна быть переменная Size, которая обновляется сама собой.
проголосовал за первое, случайно. |
| Время: 13:14 |