Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
если в тело цикла внести ищменеие размеров массивов, то оптимищация на лету уже не работает
так код измените:
)))) просто вам также предается менять значение своей переменной size, а значит именной первый способ с использованием ArraySIze будет в выигрыше
Ну против ИМХО я ничего не могу сказать.
У меня на очень больших повторах победа стала случайной у первого и второго способа... скорее всего стало зависит от кэша проца на текущий момент и общей загрузки.
Вопрос был не касаемо цикла - а касаемо разворачивания функции. Просто в качестве примера был ArraySize
Это хорошо) Совершенство высокоуровневого языка как раз и проявляется когда удобная запись так же дешева, как и не удобная, но изначально дешевая. Жаль не всегда так, и справка с хелпом для новеньких совсем тоже не всегда..... вопросов бы не было бы)))
если в тело цикла внести ищменеие размеров массивов, то оптимищация на лету уже не работает
так код измените:
не выходит
runtime оптимизация в лидерах будет
не получится такие простые машшиные команды без профилировщика протестировать, в общем, что хотите можете в цикле писать, как вариант в тестере протестировать, для него важна скорость
Речь шла не про цикл а то как компилятор функции разворачивает..... да ладно в общем.
Оставлю я вас
)))) просто вам также предается менять значение своей переменной size, а значит именной первый способ с использованием ArraySIze будет в выигрыше
выше дописал - не тестируется такой простой код просто замерами, очень много факторов - код мал по размеру - он весь в кеш процессора поместится, код должен хорошо разбиваться в процессоре на параллельные микрокоманды в конвейере процессора, т.е. регистры будут быстро загружаться предвыборкой данных
ну и возможно rand() тоже где то хорошо начал кэшироваться
в общем я не знаю как тут тестировать без дебагера - там хоть время исполнения инструкций в тактах можно посмотреть
дак докажите мне обратное)
а то у меня в тесте почему-то они одинаковые
Изменил свой пост.
Как то наоборот получается ArraySize теперь быстрее отрабатывает, чем переменная cnt.
Раньше наоборот было. Наверно инкремент cnt-- влияет, тело цикла разные и наверно надо что то другое придумать для нагрузки.
Что то странно.
Использование ArraySize(arr) в условии цикла показывает меньшее время, чем использование переменной cnt.
Раньше было наоборот. Может это ошибка? И так быть не должно.
Вы ничего не перепутали в своем коде, кто за вас будет значение
cnt
изменять, как это происходит в первом варианте
Вопрос на 500р (без проверки), какой способ быстрее. смотри сколько в верхнем методе вызывается всяких внешних функций
как вариант теста - можно еще подсунуть в каждый тест только свои массивы - в моем примере arr1,arr2..
т.е. будет tst1_arr1[],tst1_arr2[] .... и tst2_arr1[],tst2_arr2[]
это будет более честный тест
я офф, сильно отвлекает - имхо, удобно, пользуйтесь
в общем я не знаю как тут тестировать без дебагера - там хоть время исполнения инструкций в тактах можно посмотреть
Ну, да - без отладчика никуда. А в тактах там ...
Что то странно.
Использование ArraySize(arr) в условии цикла показывает меньшее время, чем использование переменной cnt.
Раньше было наоборот. Может это ошибка? И так быть не должно.
Там случайный результат. При компиляции разворачивается доступ к ячейке памяти со значением размера массива, а размер массива будет получен и помещен в ячейку памяти заранее, при формировании массива, даже если массив динамический, и ячейки с размером массива и со значением переменной будут одинаковы по времени доступа.
Ну и судя по фразе, что компиляторы делают на 3-4 курсе информатики ... в общем буду надеяться что достаточно необходимый уровень кадров не даст мне сильно нервничать в среде МКЛ)