Это ваши фантазии, а не реальность. Не стоит доказывать то, что сами не проверяли... Создание локальных переменных в виде объектов структур и классов (без new) происходит на стеке. Как +- устроены работают массивы в МТ5 описывал ранее.
1 - через создание объект. 2 - просто через обычный вызов функции. Первое число - время в миллисекундах, на второе не надо обращать внимания.
Аж чуть ли не в 10 раз быстрее (а иногда и более, чем в 10 раз). Печалька какая... стек... куча... ***ча
Ну почему же, не обращать внимание? Дай угадаю: INT_MAX раз выполнили действие через создание временного объекта, а потом то же действие через вызов функции?
В общем-то, ожидаемый результат, учитывая то, что в рантайме еще и танцы с бубном вокруг создания класса идут (надо же этот handle, который очень смахивает на индекс в некоем контейнере получить).
PS. Исходники для воспроизведения где?
PPS. А Вы уверены, что функция вызывалась? Все таки, оптимизатор есть и в этом коде, не факт, что будет вызов функции в run-time:
for (int i=0;i<500;++i){
int x=Get(i);}
int Get(int x) {return -x;}
То, что UB в mql есть - доказывает этот код:
voidOnStart(){
Print(Test()?"Ok":"No");
}
bool Test (void)
{
constint MAX = 1000;
int a=1,b=1,c=1;
while (1) {
if (((a*a*a) == ((b*b*b)+(c*c*c)))) returntrue;
a++;
int x=Get(a);
if (a>MAX) {
a=1;
b++;
}
if (b>MAX) {
b=1;
c++;
}
if (c>MAX) {
c=1;
}
}
returnfalse;
}
Ловко вы обвели компилятор вокруг пальца: - false ветка выбрасывается, так как нет break из while(1) цикла. - true возвращается, так как операции выполняются с локальными переменными без какого-либо взаимодействия с "внешним миром" и выполнения данного кода тоже выбрасывается.
Ловко вы обвели компилятор вокруг пальца: - false ветка выбрасывается, так как нет break из while(1) цикла. - true возвращается, так как операции выполняются с локальными переменными без какого-либо взаимодействия с "внешним миром" и выполнения данного кода тоже выбрасывается.
Это не я - это один из примеров на просторах инета. Один в один с плюсов.
Ну почему же, не обращать внимание? Дай угадаю: INT_MAX раз выполнили действие через создание временного объекта, а потом то же действие через вызов функции?
В общем-то, ожидаемый результат, учитывая то, что в рантайме еще и танцы с бубном вокруг создания класса идут (надо же этот handle, который очень смахивает на индекс в некоем контейнере получить).
PS. Исходники для воспроизведения где?
PPS. А Вы уверены, что функция вызывалась? Все таки, оптимизатор есть и в этом коде, не факт, что будет вызов функции в run-time:
То, что UB в mql есть - доказывает этот код:
Не угадал. Здесь не гадать надо, а достаточно помнить вчерашний день, в случая проблем с памятью, можно по цитатам посмотреть о чем разговор. С чего вдруг результат стал ожидаемым, если до этого вы утверждали обратное?
Да, уверен, функция вызывалась. А вам все так нравится мечтать, что я идиот? Почему вопрос только про функцию, а может и объект тоже не создавался? Или вы так прям уверены, что знаете как устроены все компиляторы?
Разница во времени выполнения сохраняется и без всех этих телодвижений со статическими переменными и полями. Именно разница в микросекундах, а не процентное соотношение.
Вывод: затраты на создание временного объекта на стеке достаточно малы, на моем, не самом быстром компе, составили порядка 30-40 нс/шт (наносекунда), что бы на них, в подавляющем большинстве случаев, обращать внимание.
PS. А я плохо про разработчиков подумал, ан нет, надо просто не верить людям на слово и проверять их)))
Раз Дмитрий застеснялся свой код выложить, то пришлось самому 15 мин. тестам уделить.
Упс. При идентичных действиях, разница всего 30% получилась.
Разница во времени выполнения сохраняется и без всех этих телодвижений со статическими переменными и полями. Именно разница в микросекундах, а не процентное соотношение.
Вывод: затраты на создание временного объекта на стеке достаточно малы, на моем, не самом быстром компе, составили порядка 30-40 нс/шт (наносекунда), что бы на них, в подавляющем большинстве случаев, обращать внимание.
PS. А я плохо про разработчиков подумал, ан нет, надо просто не верить людям на слово и проверять их)))
А еще больше сделай всяких разных вычислений внутри, разница еще меньше будет. Да и вообще, это тест сложно назвать тестом идентичного функционала.
Что-то вы о структурах и классах (без new) забыли - они оба на стеке выделяются.
не путайте с С++, тут всё ближе к шарпу
не путайте с С++, тут всё ближе к шарпу
Это ваши фантазии, а не реальность.
Не стоит доказывать то, что сами не проверяли...
Создание локальных переменных в виде объектов структур и классов (без new) происходит на стеке.
Как +- устроены работают массивы в МТ5 описывал ранее.
Какой обломс!
1 - через создание объект. 2 - просто через обычный вызов функции. Первое число - время в миллисекундах, на второе не надо обращать внимания.
Аж чуть ли не в 10 раз быстрее (а иногда и более, чем в 10 раз). Печалька какая... стек... куча... ***ча
Ну почему же, не обращать внимание? Дай угадаю: INT_MAX раз выполнили действие через создание временного объекта, а потом то же действие через вызов функции?
В общем-то, ожидаемый результат, учитывая то, что в рантайме еще и танцы с бубном вокруг создания класса идут (надо же этот handle, который очень смахивает на индекс в некоем контейнере получить).
PS. Исходники для воспроизведения где?
PPS. А Вы уверены, что функция вызывалась? Все таки, оптимизатор есть и в этом коде, не факт, что будет вызов функции в run-time:
То, что UB в mql есть - доказывает этот код:
То, что UB в mql есть - доказывает этот код:
Ловко вы обвели компилятор вокруг пальца:
- false ветка выбрасывается, так как нет break из while(1) цикла.
- true возвращается, так как операции выполняются с локальными переменными без какого-либо взаимодействия с "внешним миром" и выполнения данного кода тоже выбрасывается.
Ловко вы обвели компилятор вокруг пальца:
- false ветка выбрасывается, так как нет break из while(1) цикла.
- true возвращается, так как операции выполняются с локальными переменными без какого-либо взаимодействия с "внешним миром" и выполнения данного кода тоже выбрасывается.
Это не я - это один из примеров на просторах инета. Один в один с плюсов.
Ну почему же, не обращать внимание? Дай угадаю: INT_MAX раз выполнили действие через создание временного объекта, а потом то же действие через вызов функции?
В общем-то, ожидаемый результат, учитывая то, что в рантайме еще и танцы с бубном вокруг создания класса идут (надо же этот handle, который очень смахивает на индекс в некоем контейнере получить).
PS. Исходники для воспроизведения где?
PPS. А Вы уверены, что функция вызывалась? Все таки, оптимизатор есть и в этом коде, не факт, что будет вызов функции в run-time:
То, что UB в mql есть - доказывает этот код:
Не угадал. Здесь не гадать надо, а достаточно помнить вчерашний день, в случая проблем с памятью, можно по цитатам посмотреть о чем разговор. С чего вдруг результат стал ожидаемым, если до этого вы утверждали обратное?
Да, уверен, функция вызывалась. А вам все так нравится мечтать, что я идиот? Почему вопрос только про функцию, а может и объект тоже не создавался? Или вы так прям уверены, что знаете как устроены все компиляторы?
Можете объяснить о чем речь, а то я чуть-чуть туповат, трижды прочитал - но ни чего так и не понял...
Посмотрите по цитатам о чем разговор. Что я процитировал, и в ответ на что я получал этот ответ из цитаты.
Раз Дмитрий застеснялся свой код выложить, то пришлось самому 15 мин. тестам уделить.
Упс. При идентичных действиях, разница всего 30% получилась.
Разница во времени выполнения сохраняется и без всех этих телодвижений со статическими переменными и полями. Именно разница в микросекундах, а не процентное соотношение.
Вывод: затраты на создание временного объекта на стеке достаточно малы, на моем, не самом быстром компе, составили порядка 30-40 нс/шт (наносекунда), что бы на них, в подавляющем большинстве случаев, обращать внимание.
PS. А я плохо про разработчиков подумал, ан нет, надо просто не верить людям на слово и проверять их)))
Раз Дмитрий застеснялся свой код выложить, то пришлось самому 15 мин. тестам уделить.
Упс. При идентичных действиях, разница всего 30% получилась.
Разница во времени выполнения сохраняется и без всех этих телодвижений со статическими переменными и полями. Именно разница в микросекундах, а не процентное соотношение.
Вывод: затраты на создание временного объекта на стеке достаточно малы, на моем, не самом быстром компе, составили порядка 30-40 нс/шт (наносекунда), что бы на них, в подавляющем большинстве случаев, обращать внимание.
PS. А я плохо про разработчиков подумал, ан нет, надо просто не верить людям на слово и проверять их)))
А еще больше сделай всяких разных вычислений внутри, разница еще меньше будет. Да и вообще, это тест сложно назвать тестом идентичного функционала.
Да еще и сами тесты не идентичны.