如何在不使用递归的情况下故意触发StackOverflowException?

Cui*_*崔鹏飞 7 .net c# stack-overflow recursion

有人告诉我,每个方法的堆栈大小都是1mb.所以我假设在一个方法中初始化256个整数值将导致StackOverflowException.我在代码中尝试过,但没有抛出任何异常.

那么,如何在不使用递归的情况下故意触发StackOverflowException?

Yah*_*hia 19

使用

throw new StackOverflowException ();
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 7

stackalloc可能是最简单的方法(假设您希望运行时抛出错误,而不是您自己):

    unsafe void Boom()
    {
        int* data = stackalloc int[512 * 1024]; // 2MB
    }
Run Code Online (Sandbox Code Playgroud)


xan*_*tos 5

我将添加另一种方法:-)

unsafe struct FixedBufferExample
{
    public fixed byte Buffer[128 * 1024]; // This is a fixed buffer.
}
Run Code Online (Sandbox Code Playgroud)

现在这个结构是128kb :-)如果你声明一个局部变量(一个不使用yield或async的方法)的类型,FixedBufferExample它应该使用128kb的堆栈.你可以很快用完你的堆栈.