gpt4 book ai didi

c# - 为什么这种递归方法在没有变量时会导致堆栈溢出错误?

转载 作者:行者123 更新时间:2023-12-04 15:56:21 24 4
gpt4 key购买 nike

我有这样的递归方法,它不包含任何变量。为什么会抛出堆栈溢出异常?

class MainClass
{
static void Main() => Bark();

static void Bark() { Bark(); }
}

在上面的例子中,我没有创建任何变量。如果我创建任何变量(作为参数或在方法内部),那么这是可以理解的:在线程的堆栈中已经创建了许多变量,并且由于内存不足,我得到了一个错误。

我不明白,是不是方法本身也存储在堆栈中?为什么我会收到错误消息?

最佳答案

堆栈帧不只是包含参数,它还包含一个返回地址,以便处理器知道返回到哪里。

此外,隐藏的this指针也是一个参数。要删除它,您需要一个 static 函数。

还有 ebp 或其他堆栈帧指针,可以在每次调用时将其压入堆栈,具体取决于确切的调用约定。

所以无论你做什么,你在某个时候肯定会发生堆栈溢出,除非编译器决定执行尾递归。

关于c# - 为什么这种递归方法在没有变量时会导致堆栈溢出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70081795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com