Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   многократный вызов функции. оптимизация (https://forum.antichat.xyz/showthread.php?t=119480)

fucker"ok 07.05.2009 04:33

многократный вызов функции. оптимизация
 
Вопрос чисто ради интереса.

Код:

for (int i = 0; i < someshit.count(); i++) {}
Код:

int arraySize = someshit.count();
for (int i = 0; i < arraySize; i++) {}

В первом случае метод count() вызывается Х количество раз. Во втором - один раз.

Интересует мнение людей, которые знают как это работает на более низком уровне.
Много ли различных вызовов\обращений к памяти экономит второй пример и есть ли вообще смысл оптимизировать код данным образом?

RumShun 07.05.2009 06:59

Цитата:

В первом случае метод count() вызывается Х количество раз. Во втором - один раз.
в вопросе и ответ, если не хочешь count() вызывать тыщу раз то стоит, проголосовал за второй вариант, хотя пишу в Делфи а там разницы нет

KIR@PRO 07.05.2009 07:50

второй вариант значительно будет виден когда someshit.count() будет около 1кк или больше...
смотря конечно что такое someshit если это класс а count() функция, то надо смотреть как она получает результат... тут может быть несколько споссобов
1)ф-ия в цикле считает результат и выдает...
2)в классе предусмотрена переменная для хранения этого результата, которая при каждом изменеии данных пересчитывается и сохраняется в памяти тогда count() просто считывает эту переменную и выдает её результат.

сам понимаеш если первый вариант то это очень много лишних операций для тебя... если же в классе все как во втором случае то ты всеравно на каждый шаг цикла получаеш 1-2 лишних операции...


p.s. если ты уверен что значение count() у тебя всегда будет не больше 1000 то оба споссоба для человека будут одинаковы (человек не сможет заметить разницу выполнения программ в 100-200 тактов (ну может и побольше))

Algol 07.05.2009 10:41

Однозначно второй вариант

t4Nk 07.05.2009 11:10

второй вариант, только пишу так:
Код:

for (int i = 0, arraySize = someshit.count(); i < arraySize; i++) {}

Qwazar 07.05.2009 11:30

Конечно второй вариант быстрее.

З.Ы.
А если ещё и цикл разложить в последовательные вызовы и таким образом избавиться от условия на каждой итерации, так вообще :) Но это не твой случай, т.к. ты не знаешь count.

Единственное - умные компиляторы всё это дело оптимизируют.

З.З.Ы.
А по поводу названия опроса "Как вы пишете", я пишу как во 2м варианте, но к примеру Фаулер, в книге по рефакторингу рекомендует писать как в первом варианте, для того чтобы избавится от лишних переменных и сделать код более наглядным. Ну это правда к этапу оптимизации не относится, а делается раньше :)

KIR@PRO 07.05.2009 19:06

Цитата:

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

Qwazar 07.05.2009 19:09

KIR@PRO, код пишут для людей а не для компов. (Ну без фанатизма, я к тому что код должен быть понятен) В больших проектах за непонятный код надо по пальцам стучать. Представь как его потом апдейтить и багфиксить. Но по мне временные переменные - наоборот могут внести ясность, за счёт нормального имени переменной.

З.Ы.
А оптимизация это уже последний этап, когда код работает и ты по нему бегаешь профайлером, выясняя что именно стоит оптимизировать.

KIR@PRO 07.05.2009 19:42

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

p.s. может мы просто не поняли друг друга))) я же говорил именно о том что надо избавляться от временных переменных чтоб сделать код более наглядным...

p.p.s. но это мнение каждого из нас)

scrat 07.05.2009 20:15

по-моему такого вообще не должно быть, должна быть переменная Size, которая обновляется сама собой.

проголосовал за первое, случайно.


Время: 13:14