9 c c++ stack-overflow recursion calling-convention
堆栈溢出的原因是因为堆栈空间耗尽,但是如果函数没有参数,那么没有数据必须被压入堆栈呢?这仍然会推动"返回"地址,但在预期无限递归的情况下,这是不必要的.
所以我猜的是......是否有可能使用某种调用约定,调用不会在堆栈上放任何东西,只是跳转到第一条指令并执行并提供最终指令将是另一个函数调用,直到最终执行终止?理想情况下,如果可以使用函数指针和动态链接实现这一点?
只是为了指定,我指的是一个接受单个参数并且什么都不返回的函数,所以技术上fastcall就足够了,但它仍然保留了一个返回的地址,最终会导致溢出.这可以通过某种方式加以预防吗?
我之前没有提到的另一个重点,我不是指单个函数的递归,例如状态是静态的并且正在被重用,我的意思是从一个任意函数递归到另一个函数.