Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы ничего не перепутали в своем коде, кто за вас будет значение
изменять, как это происходит в первом варианте
Да, упустил этот момент. Исправил свой пост.
Там случайный результат. При компиляции разворачивается доступ к ячейке памяти со значением размера массива, а размер массива будет получен и помещен в ячейку памяти заранее, при формировании массива, даже если массив динамический, и ячейки с размером массива и со значением переменной будут одинаковы по времени доступа.
Ну и судя по фразе, что компиляторы делают на 3-4 курсе информатики ... в общем буду надеяться что достаточно необходимый уровень кадров не даст мне сильно нервничать в среде МКЛ)
Поверьте средний студент обычно ФИВТа - это просто ноль с плюсом), т.к. опыта ноль, а знания без опыта быстро уходят в никуда (забываются), да и их примеры очень странные, пройдут года прежде чем студент поймет где и как их можно использовать. Это если сравнивать с бывалым программистом.
Поверьте средний студент обычно ФИВТа - это просто ноль с плюсом), т.к. опыта ноль, а знания без опыта быстро уходят в никуда (забываются), да и их примеры очень странные, пройдут года прежде чем студент поймет где и как их можно использовать. Это если сравнивать с бывалым программистом.
Это понятно. Не понятно зачем учить как сделать компилятор. Это как учить созданию собственного языка. понятно что язык это класс, но не каждая птица долететь может априори. Ну и как выше отметил, Ошибки, Баги, Вопросы это к вопросу оптимизации компиляции на ходу тоже имеет отношение.
Тема вообще про дефайны, а не про циклы ))
Мне всё же не понятно, есть ли смысл дефайнить код, например пользовательские функции.
В надежде что задефайненый код будет быстрее выполнятся в исполняемом файле.
Или это заблуждение? Так как подстановка это всего лишь пред компиляционное действие, и логично только для ускорения сборки.
Тема вообще про дефайны, а не про циклы ))
Мне всё же не понятно, есть ли смысл дефайнить код, например пользовательские функции.
В надежде что задефайненый код будет быстрее выполнятся в исполняемом файле.
Или это заблуждение? Так как подстановка это всего лишь пред компиляционное действие, и логично только для ускорения сборки.
я же скинул пример где используется 3 внешние функции... против его развернутого вида. Т.е. ускорения не будет
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
вопрос к знатокам #define
Alexandr Andreev, 2020.11.02 19:49
Вопрос на 500р (без проверки), какой способ быстрее. смотри сколько в верхнем методе вызывается всяких внешних функций
я же скинул пример где используется 3 внешние функции... против его развернутого вида. Т.е. ускорения не будет
Понятно. Тогда привет fxsaber`у. Любителю всё подряд дефайнить.
дак докажите мне обратное)
а то у меня в тесте почему-то они одинаковые
Что касается ArraySize() и переменной. Всё таки вернусь к этому вопросу.
Вот изменил тест. Цикл считает число PI.
В первом примере, в условии цикла используется ArraySize().
Во втором примере, используется переменная num_steps.
Разница есть.
Функция ArraySize()
Три запуска скрипта.
Переменная num_steps
Три запуска скрипта.
Понятно. Тогда привет fxsaber`у. Любителю всё подряд дефайнить.
Что касается ArraySize() и переменной. Всё таки вернусь к этому вопросу.
Вот изменил тест. Цикл считает число PI.
В первом примере, в условии цикла используется ArraySize().
Во втором примере, используется переменная num_steps.
Разница есть.
Функция ArraySize()
Три запуска скрипта.
Переменная num_steps
Три запуска скрипта.
Не явная разница при таких расчетах. Поставил все это в один код, и результаты разные, есть где первый вариант выигрывает
)) у любого массива в мкл есть переменная которая отвечает за текущий размер массива, так в большинстве языков.
Функция ArraySize говорит чтобы компилятор вернул значение этой переменной т.е. он прям вместо этой функции подставляет эту переменную а т.к. масивы в мкл не могут равняться ссылкам, то указатель явный, явно на эту переменную, прям на крокетный адрес в памяти. Технически все эти тесты это попытка сравнить две обычных переменных. Это и есть свойство разворачивания функций, в моем примере 4 функции простив 0 функций, 3 из которых находиться прям в теле цикла т.е. там идет сравнения 40000000000 вызовов функций против ни одного. И мы видем неявную разницу которая слишком мала чтобы её заметить - т.к. это поставление кода в исполняемом файле.... мы сравниваем одно и тоже.
а все эти расчеты - чем они сложнее тем меньше от них смысла.
Проще привести пример где в одном случае будет вызываться сотня функций, функции в функциях... А в другом все это в развернутом виде - и разницы не будет. Т,к. ArraySize(mas)== mas[].size
Хотя почему-то пример с пи разница всеж есть.....по частоте перевеса, (редация) хотя всеж это чисто случайный перевес
и она равна 1мс на 1 миллиард вывозов, хотя это не явно попробовал сравнить переменную с переменной дак разброс стал еще больше))
Не явная разница при таких расчетах. Поставил все это в один код, и результаты разные, есть где первый вариант выигрывает
)) у любого массива в мкл есть переменная которая отвечает за текущий размер массива, так в большинстве языков.
Функция ArraySize говорит чтобы компилятор вернул значение этой переменной т.е. он прям вместо этой функции подставляет эту переменную а т.к. масивы в мкл не могут равняться ссылкам, то указатель явный, явно на эту переменную, прям на крокетный адрес в памяти. Технически все эти тесты это попытка сравнить две обычных переменных. Это и есть свойство разворачивания функций, в моем примере 4 функции простив 0 функций, 3 из которых находиться прям в теле цикла т.е. там идет сравнения 40000000000 вызовов функций против ни одного. И мы видем неявную разницу которая слишком мала чтобы её заметить - т.к. это поставление кода в исполняемом файле.... мы сравниваем одно и тоже.
а все эти расчеты - чем они сложнее тем меньше от них смысла.
Проще привести пример где в одном случае будет вызываться сотня функций, функции в функциях... А в другом все это в развернутом виде - и разницы не будет. Т,к. ArraySize(mas)== mas[].size
Не важно, что выполняется в теле цикла. Это просто нагрузка для теста.
В примерах сравнивается обращение к функции или переменной, в условии цикла.
Я не знаток ассемблера, но я думаю, что с точки зрения ассемблерных инструкций, это не одно и тоже.
А если это ещё и в классе обёрнуто, то тем более не одно и тоже.
Функция имеет лишнюю инструкцию для получения значения из ячейки памяти, то есть функция обращается к ячейке памяти за значением, и только потом возращает результат.
В переменной же уже есть это значение, переменная не куда не обращается, она сразу возвращает результат.
Не важно, что выполняется в теле цикла. Это просто нагрузка для теста.
В примерах сравнивается обращение к функции или переменной, в условии цикла.
Я не знаток ассемблера, но я думаю, что с точки зрения ассемблерных инструкций, это не одно и тоже.
А если это ещё и в классе обёрнуто, то тем более не одно и тоже.
Функция имеет лишнюю инструкцию для получения значения из ячейки памяти, то есть функция обращается к ячейке памяти за значением, и только потом возращает результат.
В переменной же уже есть это значение, переменная не куда не обращается, она сразу возвращает результат.
) ну это немного не так работает)
Почти каждый запуск лидер меняется
самое долгое тут это деление)))