小编lca*_*lov的帖子

Stackoverflow在C#做拳击

我在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)

他们都这样做:

  1. 创建一个堆栈(<int>第一个示例为通用,第二个示例为对象堆栈).

  2. 声明一个递归调用n次(n> = 0)的方法,并在每个步骤中在创建的堆栈内推送1000个整数.

当我运行第一个例子时Foo(30000)没有发生异常,但是第二个例子崩溃了Foo(1000),只有n = 1000.

当我看到为两种情况生成的CIL时,唯一的区别是每次推送的拳击部分: …

c# stack-overflow il

49
推荐指数
1
解决办法
2129
查看次数

标签 统计

c# ×1

il ×1

stack-overflow ×1