为什么调用StackOverflowException?为什么不HeapOverSizedException?

Sah*_*van 1 c# exception

示例代码:

Static void main(string[] args) { Class1 c1 = new Class1(); }

Class1 { Class1() { Class2 c2 = new Class2(); } }

Class2 { Class2() { Class1 c1 = new Class1(); } }
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出StackOverFlowException.这里我们以递归方式创建Class1&Class2对象.对象存储在堆中,那么它为什么不抛出HeapOversizedExceptionsomeotherException与堆相关?

Szy*_*mon 8

无限递归总是会导致StackOverflowException.这不是因为对象分配,而是因为对方法的调用必须记住堆栈上调用者的地址并且无限制地溢出堆栈.

维基百科对该过程有一个非常正式的描述.