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

C# 如何在不使用递归的情况下故意触发StackOverflowException?,c#,.net,recursion,stack-overflow,C#,.net,Recursion,Stack Overflow,我被告知每个方法都有一个1mb大小的堆栈。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中尝试了这一点,但没有引发异常 那么,如何在不使用递归的情况下故意触发StackOverflowException呢 throw new StackOverflowException (); stackalloc可能是最简单的方法(假设您希望运行时而不是您自己抛出错误): 我将添加另一个方法:-) 现在这个结构是128kb:-)如果您声明一个Fixe

我被告知每个方法都有一个1mb大小的堆栈。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中尝试了这一点,但没有引发异常

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

throw new StackOverflowException ();

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

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


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

256*4字节=1kb,而不是1mb256整数=256*4字节=1024字节=1kb,而不是1MB。因此,需要256000个整数。我甚至不会尝试编写一个包含256000个声明的代码。(编辑:Marc Gravels总是更快):)如果你只能在一个方法中使用
256*4
字节的内存,那就太糟糕了。。。另一方面,它可能有助于保持方法的小型化!:-)+1.始终使用最简单的方法获得您想要的结果:)如果在64位系统上使用,有什么区别吗?堆栈更大吗?
    unsafe void Boom()
    {
        int* data = stackalloc int[512 * 1024]; // 2MB
    }
unsafe struct FixedBufferExample
{
    public fixed byte Buffer[128 * 1024]; // This is a fixed buffer.
}