массив это участок памяти, доступ к элементам массива - это расчет индекса элемента от начала этого участка памяти и извлечение данных (байты) в соответствии с хранимым типом
если это логика алгоритма, то да - это индексируемые переменные
Время исполнения бинарной операции в разы быстрее чем время исполнения оператора if (так и должно быть).... Походу за кулисами либо чисто, либо супер быстрый нативный код
Время исполнения бинарной операции в разы быстрее чем время исполнения оператора if (так и должно быть)....
в циклах не должно быть if() , раньше цикл по регистру CX исполнялся
Alexandr Andreev:
Время верхнего в два раза меньше чем у нижнего
не обсуждаю, утром опять тестировал, рантайм-оптимизация всегда работает в MQL5, от количества циклов зависит результат, ну от того какой тест первым вызвали - не буду больше тестировать, напрасная трата времени
в циклах не должно быть if() , раньше цикл по регистру CX исполнялся
не обсуждаю, утром опять тестировал, рантайм-оптимизация всегда работает в MQL5, от количества циклов зависит результат, ну от того какой тест первым вызвали - не буду больше тестировать, напрасная трата времени
.... Вам надо следить за своими постами)))) пост выше ссылается на пост в котором предполагалось что оператор ArraySize делает проверку на вылет за пределы (ЭТО и есть Ваш if) и именно добавив его в тело реально проверить, и это единственно верный способ.
И разница от того что запускать первый есть только в Ваших тестах)
И разница от того что запускать первый есть только в Ваших тестах)
Ваш тест дайте, посмотрим
хотя... нафиг, вообще на автомате в споре участвую, нравится пользуйте, я другого мнения о целесообразности использования ArraySize() в условии прекращения цикла
Dmitry Fedoseev: А кто знает кроме создателей компилятора? Может ArraySize() работает точно так же, как обращение к переменной. Это кажется возможным.
voidOnStart()
{
int mas[];
int size=1000000000;
ArrayResize(mas,size);
int r2=0;
int tr=0;
int num_steps=ArraySize(mas);
double step = 1.0/(double)num_steps;
int v=size;
ulong t1 = GetMicrosecondCount();
// for(ulong z=0; z<max; z++)int sizem=Size(mas);
{
for(int i=0; i<sizem; i++)
{
r2+=sizem;
r2|=sizem;
}
}
ulong t2=GetMicrosecondCount();
{
for(int i=0; i<Size(mas); i++)
{
r2+=Size(mas);
r2|=Size(mas);
}
}
ulong t3=GetMicrosecondCount();
Print(t2-t1," ",t3-t2," ",r2) ;
}
int Size(int &mas[]){return Size2(mas);}
int Size2(int &mas[]){return Size3(mas);}
int Size3(int &mas[]){returnArraySize(mas);}
Прошу обратить внимание что тут тест между функцией которая вызывает функцию которая вызывает функцию которая вызываает ArraySize и скорость одинакова, что к доступу просто переменной. Т.к. компилятор их просто разворачивает
хотя... нафиг, вообще на автомате в споре участвую, нравится пользуйте, я другого мнения о целесообразности использования ArraySize() в условии прекращения цикла
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
протестируйте хоть десять раз, чтобы посмотреть что происходит
обернул во внешний цикл код, результат:
HQ015:26:55.230tst (EURUSD,H1)558620 543908 -512
RO015:28:08.672tst (EURUSD,H1)544176 543129 -512
EF015:28:09.759tst (EURUSD,H1)544139 543144 -512
RM015:28:10.847tst (EURUSD,H1)544174 543436 -512
GD015:28:11.934tst (EURUSD,H1)543668 543531 -512
CR015:28:13.021tst (EURUSD,H1)543413 543097 -512
JI015:28:14.107tst (EURUSD,H1)543046 543218 -512
HP015:28:15.194tst (EURUSD,H1)543337 543469 -512
PO015:28:16.282tst (EURUSD,H1)543602 544455 -512
KE015:28:17.369tst (EURUSD,H1)543253 543197 -512
CL015:28:18.457tst (EURUSD,H1)544199 543664 -512
переставлять местами не буду исследуемые циклы, надоело - размер кода выше приводил, значит хорошая оптимизация, возможно с анализатором кода, в прошлом году был удивлен, в оптимизации iCustom для MQL4 - 4 вызова значений 4=х индикаторных буферов заменяются на один вызов , где то был топик, опять же про эффективность
в общем Метаквоты хорошо поработали над анализом типовых кодов от юзеров, т.е. большинство писанины юзеров компилятор сам приведет в порядок,.. имхо круто!
Извините, возможно ошибаюсь. Всё ЭТО не читал. Только первую страницу. Впечатление - как обычно. Кто-то задаёт конкретный вопрос. И тут же налетают флудерасты.
Ещё раз извините, А ЭТО ДЕЙСТВИТЕЛЬНО ФОРУМ РАЗРАБОТЧИКОВ ????
Извините, возможно ошибаюсь. Всё ЭТО не читал. Только первую страницу. Впечатление - как обычно. Кто-то задаёт конкретный вопрос. И тут же налетают флудерасты.
Ещё раз извините, А ЭТО ДЕЙСТВИТЕЛЬНО ФОРУМ РАЗРАБОТЧИКОВ ????
Ошибаетесь, там и другие вопросы поднялись, отличные от вопросов ТС. А понимание принципов компиляции иногда выручает.
если физически в команда ЦПУ, то нет
массив это участок памяти, доступ к элементам массива - это расчет индекса элемента от начала этого участка памяти и извлечение данных (байты) в соответствии с хранимым типом
если это логика алгоритма, то да - это индексируемые переменные
в общем по изучаемой проблеме, единственный правильный совет https://www.mql5.com/ru/forum/354662/page4#comment_19039624:
{ for(int i=0; i<ArraySize(mas); i++) { r2+=ArraySize(mas); r2|=ArraySize(mas); } } ulong t2=GetMicrosecondCount(); //for(ulong z=0; z<max; z++) int sizem=ArraySize(mas); { for(int i=0; i<sizem; i++) { r2+=sizem; if (r2>10) r2|=sizem; } }Время исполнения бинарной операции в разы быстрее чем время исполнения оператора if (так и должно быть).... Походу за кулисами либо чисто, либо супер быстрый нативный код
Время верхнего в два раза меньше чем у нижнего
Ну технически мы сравнивали две переменных))
Время исполнения бинарной операции в разы быстрее чем время исполнения оператора if (так и должно быть)....
в циклах не должно быть if() , раньше цикл по регистру CX исполнялся
Время верхнего в два раза меньше чем у нижнего
не обсуждаю, утром опять тестировал, рантайм-оптимизация всегда работает в MQL5, от количества циклов зависит результат, ну от того какой тест первым вызвали - не буду больше тестировать, напрасная трата времени
в циклах не должно быть if() , раньше цикл по регистру CX исполнялся
не обсуждаю, утром опять тестировал, рантайм-оптимизация всегда работает в MQL5, от количества циклов зависит результат, ну от того какой тест первым вызвали - не буду больше тестировать, напрасная трата времени
.... Вам надо следить за своими постами)))) пост выше ссылается на пост в котором предполагалось что оператор ArraySize делает проверку на вылет за пределы (ЭТО и есть Ваш if) и именно добавив его в тело реально проверить, и это единственно верный способ.
И разница от того что запускать первый есть только в Ваших тестах)
И разница от того что запускать первый есть только в Ваших тестах)
Ваш тест дайте, посмотрим
хотя... нафиг, вообще на автомате в споре участвую, нравится пользуйте, я другого мнения о целесообразности использования ArraySize() в условии прекращения цикла
размеры .ex5
А кто знает кроме создателей компилятора? Может ArraySize() работает точно так же, как обращение к переменной. Это кажется возможным.
Прошу обратить внимание что тут тест между функцией которая вызывает функцию которая вызывает функцию которая вызываает ArraySize и скорость одинакова, что к доступу просто переменной. Т.к. компилятор их просто разворачивает
ArraySizeФорум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
вопрос к знатокам #define
Igor Makanu, 2020.11.03 11:39
Ваш тест дайте, посмотрим
хотя... нафиг, вообще на автомате в споре участвую, нравится пользуйте, я другого мнения о целесообразности использования ArraySize() в условии прекращения цикла
опять тест от_балды....
Вы почему тестируете один раз свое творение?
протестируйте хоть десять раз, чтобы посмотреть что происходит
обернул во внешний цикл код, результат:
HQ 0 15:26:55.230 tst (EURUSD,H1) 558620 543908 -512
RO 0 15:28:08.672 tst (EURUSD,H1) 544176 543129 -512
EF 0 15:28:09.759 tst (EURUSD,H1) 544139 543144 -512
RM 0 15:28:10.847 tst (EURUSD,H1) 544174 543436 -512
GD 0 15:28:11.934 tst (EURUSD,H1) 543668 543531 -512
CR 0 15:28:13.021 tst (EURUSD,H1) 543413 543097 -512
JI 0 15:28:14.107 tst (EURUSD,H1) 543046 543218 -512
HP 0 15:28:15.194 tst (EURUSD,H1) 543337 543469 -512
PO 0 15:28:16.282 tst (EURUSD,H1) 543602 544455 -512
KE 0 15:28:17.369 tst (EURUSD,H1) 543253 543197 -512
CL 0 15:28:18.457 tst (EURUSD,H1) 544199 543664 -512
переставлять местами не буду исследуемые циклы, надоело - размер кода выше приводил, значит хорошая оптимизация, возможно с анализатором кода, в прошлом году был удивлен, в оптимизации iCustom для MQL4 - 4 вызова значений 4=х индикаторных буферов заменяются на один вызов , где то был топик, опять же про эффективность
в общем Метаквоты хорошо поработали над анализом типовых кодов от юзеров, т.е. большинство писанины юзеров компилятор сам приведет в порядок,.. имхо круто!
Извините, возможно ошибаюсь. Всё ЭТО не читал. Только первую страницу. Впечатление - как обычно. Кто-то задаёт конкретный вопрос. И тут же налетают флудерасты.
Ещё раз извините, А ЭТО ДЕЙСТВИТЕЛЬНО ФОРУМ РАЗРАБОТЧИКОВ ????
Извините, возможно ошибаюсь. Всё ЭТО не читал. Только первую страницу. Впечатление - как обычно. Кто-то задаёт конкретный вопрос. И тут же налетают флудерасты.
Ещё раз извините, А ЭТО ДЕЙСТВИТЕЛЬНО ФОРУМ РАЗРАБОТЧИКОВ ????
Ошибаетесь, там и другие вопросы поднялись, отличные от вопросов ТС. А понимание принципов компиляции иногда выручает.