Причина переполнения стека заключается в том, что пространство стека заканчивается, но что, если функции не имеют параметров, поэтому данные не нужно помещать в стек? При этом остается нажимать адрес «возврата», но в случае намеренной бесконечной рекурсии в этом нет необходимости.
Итак, я спрашиваю, я думаю, это... возможно ли использовать какое-то соглашение о вызовах, чтобы вызов ничего не помещал в стек, а просто переходил к первой инструкции и выполнялся, и при условии, что последняя инструкция будет еще один вызов функции, пока в конечном итоге выполнение не будет прекращено? В идеале, если это можно реализовать с помощью указателей на функции и динамической компоновки?
Просто для уточнения, я имею в виду функцию, которая принимает один параметр и ничего не возвращает, поэтому технически fastcall будет достаточно, но она по-прежнему сохраняет адрес для возврата, что в конечном итоге приведет к переполнению. Можно ли это как-то предотвратить?
Еще один важный момент, который я не упомянул ранее, я не имею в виду рекурсию одной функции, например. где состояние статично и используется повторно, я имею в виду рекурсию из одной произвольной функции в другую.