我在C#中有这两个代码块:
class Program
{
static Stack<int> S = new Stack<int>();
static int Foo(int n) {
if (n == 0)
return 0;
S.Push(0);
S.Push(1);
...
S.Push(999);
return Foo( n-1 );
}
}
Run Code Online (Sandbox Code Playgroud)
class Program
{
static Stack S = new Stack();
static int Foo(int n) {
if (n == 0)
return 0;
S.Push(0);
S.Push(1);
...
S.Push(999);
return Foo( n-1 );
}
}
Run Code Online (Sandbox Code Playgroud)
他们都这样做:
创建一个堆栈(<int>第一个示例为通用,第二个示例为对象堆栈).
声明一个递归调用n次(n> = 0)的方法,并在每个步骤中在创建的堆栈内推送1000个整数.
当我运行第一个例子时Foo(30000)没有发生异常,但是第二个例子崩溃了Foo(1000),只有n = 1000.
当我看到为两种情况生成的CIL时,唯一的区别是每次推送的拳击部分: …