【发布时间】:2022-01-01 23:59:22
【问题描述】:
我有这样的递归方法,它不包含任何变量。为什么会抛出堆栈溢出异常?
class MainClass
{
static void Main() => Bark();
static void Bark() { Bark(); }
}
在上面的例子中,我没有创建任何变量。如果我创建任何变量(作为参数或在方法内部),那么这是可以理解的:在线程的堆栈中已经创建了许多变量,并且由于内存不足,我得到了一个错误。
我不明白,是不是方法本身也存储在堆栈中?为什么我会收到错误消息?
【问题讨论】:
-
返回地址也存储在栈上。方法需要知道从哪里调用它才能返回该代码。
-
如果我理解错了,请纠正我:你说堆栈也存储方法的地址?
-
不是方法的,而是被调用的方法返回时要恢复执行的代码地址。
-
标志也被推送。
-
你的代码在不停地吠叫。您引入了一个没有基本情况的递归。
标签: c# multithreading memory stack stack-overflow