ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Результаты опроса: как вы пишите?
1-ый вариант 11 28.21%
второй 28 71.79%
Голосовавшие: 39. Вы ещё не участвовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме Опции просмотра

многократный вызов функции. оптимизация
  #1  
Старый 07.05.2009, 04:33
fucker"ok
Познавший АНТИЧАТ
Регистрация: 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() вызывается Х количество раз. Во втором - один раз.

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

  #2  
Старый 07.05.2009, 06:59
RumShun
Постоянный
Регистрация: 27.10.2008
Сообщений: 380
Провел на форуме:
1249808

Репутация: 149
Отправить сообщение для RumShun с помощью ICQ
По умолчанию

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

  #3  
Старый 07.05.2009, 07:50
KIR@PRO
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме:
905389

Репутация: 332
Отправить сообщение для KIR@PRO с помощью ICQ
По умолчанию

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

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


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

  #4  
Старый 07.05.2009, 10:41
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Однозначно второй вариант
 
Ответить с цитированием

  #5  
Старый 07.05.2009, 11:10
t4Nk
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме:
938032

Репутация: 86
По умолчанию

второй вариант, только пишу так:
Код:
for (int i = 0, arraySize = someshit.count(); i < arraySize; i++) {}
 
Ответить с цитированием

  #6  
Старый 07.05.2009, 11:30
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

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

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

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

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

Мой блог:http://qwazar.ru/.

Последний раз редактировалось Qwazar; 07.05.2009 в 11:37..
 
Ответить с цитированием

  #7  
Старый 07.05.2009, 19:06
KIR@PRO
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме:
905389

Репутация: 332
Отправить сообщение для KIR@PRO с помощью ICQ
По умолчанию

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

  #8  
Старый 07.05.2009, 19:09
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

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

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

Мой блог:http://qwazar.ru/.

Последний раз редактировалось Qwazar; 07.05.2009 в 19:12..
 
Ответить с цитированием

  #9  
Старый 07.05.2009, 19:42
KIR@PRO
Постоянный
Регистрация: 26.12.2007
Сообщений: 353
Провел на форуме:
905389

Репутация: 332
Отправить сообщение для KIR@PRO с помощью ICQ
По умолчанию

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

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

p.p.s. но это мнение каждого из нас)
 
Ответить с цитированием

  #10  
Старый 07.05.2009, 20:15
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

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

проголосовал за первое, случайно.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с буфером обмена в kernel-mode 0x0c0de Реверсинг 11 01.06.2009 11:51
Оптимизация сайта под поисковик Spiktorg Белые методы раскрутки 1 14.05.2009 04:22
Кейлогер на Vb или как правильно играть в Gta!!! je0n Авторские статьи 6 25.05.2007 23:55
Поиск PHP уязвимостей на примере phpBB _-[A.M.D]HiM@S-_ Статьи 1 29.10.2006 11:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ