судя по Вашему исследованию класс В будет медленнее выполняться если часто использовать поля структуры при расчетах?
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Оба класса аналогичны. Доступ идёт по смещению в обоих случаях, только не относительно начала структуры, а относительно начала класса. Т.е. структура сама по себе невесома. Оверхед создают лишь классы.
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Спасибо Владимир за ассемблерное исследование. И как предполагает Алексей, оверхед создают классы. Из этого можно сделать вывод, если можно обойтись без класса, лучшие писать код в процедурном стиле. То есть если задача не требует скоростей, то можно обернуть в класс, если же это работа к примеру с тиками, то лучше использовать напрямую без обёрток. В принципе такого похода я и придерживался, и зачастую найдя какой нибудь пример класса, я разбираю его методы на процедурный подход.
Спасибо Владимир за ассемблерное исследование. И как предполагает Алексей, оверхед создают классы. Из этого можно сделать вывод, если можно обойтись без класса, лучшие писать код в процедурном стиле. То есть если задача не требует скоростей, то можно обернуть в класс, если же это работа к примеру с тиками, то лучше использовать напрямую без обёрток. В принципе такого похода я и придерживался, и зачастую найдя какой нибудь пример класса, я разбираю его методы на процедурный подход.
На форуме завелся какой-то троль... Раньше не понимал зачем некоторые пользователи просят ввести функцию игнора, ах как ее теперь не хватает...
По какой причине доступ к первому полю простой структуры зависит от ее размера - не понятно.
Вы используете 50М элементов в массиве. Для структур размером 20 и 84 байт - это соответственно 0.93 ГБ и 3.91 ГБ данных. И в рамка вашего расчета, предположительно, вся эта память пройдет через кеш процесора. И весьма логичным объяснением полученных результатов может быть то, что данные размером 0.93 ГБ загрузится из памяти в кеш процессора в четыре разы быстрее, чем данные размером 3.91 ГБ.
А что там с результатами теста на С++? А то ассемблеровский код видел, а результатов тестов - нет, или плохо смотрел?
Вы используете 50М элементов в массиве. Для структур размером 20 и 84 байт - это соответственно 0.93 ГБ и 3.91 ГБ данных. И в рамка вашего расчета, предположительно, вся эта память пройдет через кеш процесора. И весьма логичным объяснением полученных результатов может быть то, что данные размером 0.93 ГБ загрузится из памяти в кеш процессора в четыре разы быстрее, чем данные размером 3.91 ГБ.
А что там с результатами теста на С++? А то ассемблеровский код видел, а результатов тестов - нет, или плохо смотрел?
аналогично получается. Побыстрее только чутка, а так, соотношение то же, так, что аппаратное это.
Спасибо Владимир за ассемблерное исследование. И как предполагает Алексей, оверхед создают классы. Из этого можно сделать вывод, если можно обойтись без класса, лучшие писать код в процедурном стиле. То есть если задача не требует скоростей, то можно обернуть в класс, если же это работа к примеру с тиками, то лучше использовать напрямую без обёрток. В принципе такого похода я и придерживался, и зачастую найдя какой нибудь пример класса, я разбираю его методы на процедурный подход.
если написать такие классы:
судя по Вашему исследованию класс В будет медленнее выполняться если часто использовать поля структуры при расчетах?
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Спасибо, это полезно!
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Так, что никакой мистики - законы физики в действии.
Не укладывается в "законы физики".
Парадоксальный результат получился. Более сложные вычисления производятся в 1.5 раза быстрее и не зависят от размера.
Так-то обсуждалось время обхода массива объектов)))
По Вашему примеру в плюсах одинаково будет, а вот в mql - нюанс, тут есть два неявных поля, которые первыми идут, поэтому, к полю data, обращение пойдет по смещению, то есть дополнительные вычисления при разыменовании будут.
Спасибо Владимир за ассемблерное исследование.
И как предполагает Алексей, оверхед создают классы.
Из этого можно сделать вывод, если можно обойтись без класса, лучшие писать код в процедурном стиле.
То есть если задача не требует скоростей, то можно обернуть в класс, если же это работа к примеру с тиками, то лучше использовать напрямую без обёрток.
В принципе такого похода я и придерживался, и зачастую найдя какой нибудь пример класса, я разбираю его методы на процедурный подход.
Спасибо Владимир за ассемблерное исследование.
И как предполагает Алексей, оверхед создают классы.
Из этого можно сделать вывод, если можно обойтись без класса, лучшие писать код в процедурном стиле.
То есть если задача не требует скоростей, то можно обернуть в класс, если же это работа к примеру с тиками, то лучше использовать напрямую без обёрток.
В принципе такого похода я и придерживался, и зачастую найдя какой нибудь пример класса, я разбираю его методы на процедурный подход.
На форуме завелся какой-то троль...
Раньше не понимал зачем некоторые пользователи просят ввести функцию игнора, ах как ее теперь не хватает...
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы по ООП в MQL5
fxsaber, 2020.05.30 14:06
Даже возиться не хочу. Сделал простые структуры.
По какой причине доступ к первому полю простой структуры зависит от ее размера - не понятно.
Для структур размером 20 и 84 байт - это соответственно 0.93 ГБ и 3.91 ГБ данных.
И в рамка вашего расчета, предположительно, вся эта память пройдет через кеш процесора.
И весьма логичным объяснением полученных результатов может быть то, что данные размером 0.93 ГБ загрузится из памяти в кеш процессора в четыре разы быстрее, чем данные размером 3.91 ГБ.
А что там с результатами теста на С++?
А то ассемблеровский код видел, а результатов тестов - нет, или плохо смотрел?
На форуме завелся какой-то троль...
Раньше не понимал зачем некоторые пользователи просят ввести функцию игнора, ах как ее теперь не хватает...
Ты бы за собой следил, а не за другими.
Не тебе и не для тебя был ответ.
Игнорируй молча ))
Для структур размером 20 и 84 байт - это соответственно 0.93 ГБ и 3.91 ГБ данных.
И в рамка вашего расчета, предположительно, вся эта память пройдет через кеш процесора.
И весьма логичным объяснением полученных результатов может быть то, что данные размером 0.93 ГБ загрузится из памяти в кеш процессора в четыре разы быстрее, чем данные размером 3.91 ГБ.
А что там с результатами теста на С++?
А то ассемблеровский код видел, а результатов тестов - нет, или плохо смотрел?
Спасибо Владимир за ассемблерное исследование.
И как предполагает Алексей, оверхед создают классы.
Из этого можно сделать вывод, если можно обойтись без класса, лучшие писать код в процедурном стиле.
То есть если задача не требует скоростей, то можно обернуть в класс, если же это работа к примеру с тиками, то лучше использовать напрямую без обёрток.
В принципе такого похода я и придерживался, и зачастую найдя какой нибудь пример класса, я разбираю его методы на процедурный подход.
Структуру вместо класса можно, с ними все норм.