(02.04.2019 16:03)igrik Wrote: Но по настоящему быстрее будет исполозование SN:G вместо DO и т.п.
Всё из за особенностей запуска функций типа !?FU. Если коротко, то цикл SN:G в десятки, если даже не в сотни раз быстрее цикла DO, потому что в нем не происходит каждый раз вызов функции !?FU.
Значит ли это, что вызов функции с помощью !!SN:C тоже будет быстрее обычного вызова функции с помощью !!FU?
Я имею в виду такой код:
!?FU345345;
!!SN:C0/456456/?y1; получить адрес функции 456456
!!SN:Cy1/0; перейти к функции
!?FU456456;
...что-то делаем
!!SN:R; возврат к предыдущей функции (345345)
И если вызов с помощью SN:C действительно быстрее, то как таким способом вызвать функцию с параметрами, то есть написать аналог например такой команды:
!!FU456456:Px1/x2/x3/x4;
У меня есть одна догадка, но я не уверен в ее правильности.
Буду очень благодарен, если кто-нибудь подтвердит ее или наоборот опровергнет или предложит лучший способ:
!?FU345345;
!!SN:M-1/4/0/0; выделение массива из 4-х чисел в свободный слот памяти, № слота v1
!!SN:Mv1/0/x1 Mv1/1/x2 Mv1/2/x3 Mv1/3/x4; записываем значения x1, x2, x3, x4 в слот v1
!!SN:C0/456456/?y1;
!!SN:Cy1/0; выполняется функция 456456
!!SN:Mv1; удаляем слот v1
!?FU456456;
!!SN:Mv1/0/?x1 Mv1/1/?x2 Mv1/2/?x3 Mv1/3/?x3; считываем значения
...что-то делаем
!!SN:R;
или может лучше так:
!?FU345345;
!!SN:M456456/4/0/0; выделение слота памяти
!!SN:M456456/0/x1 M456456/1/x2 M456/2/x3 M456/3/x4; записываем значения x1, x2, x3, x4
!!SN:C0/456456/?y1;
!!SN:Cy1/0; выполняется функция 456456
!!SN:M456456; удаляем слот
!?FU456456;
!!SN:M456456/0/?x1 M456456/1/?x2 M456456/2/?x3 M456456/3/?x3; считываем значения
...что-то делаем
!!SN:R;
Или может все это вообще бесполезно и вызов с помощью SN:C ничем не быстрее?
(This post was last modified: 10.04.2019 21:37 by wessonsm.)