有人告诉我,每个方法的堆栈大小都是1mb。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中尝试过,但没有抛出任何异常。
那么,如何在不使用递归的情况下故意触发StackOverflowException?
答案 0 :(得分:19)
使用
throw new StackOverflowException ();
答案 1 :(得分:7)
stackalloc
可能是最简单的方法(假设你希望运行时抛出错误,而不是你自己):
unsafe void Boom()
{
int* data = stackalloc int[512 * 1024]; // 2MB
}
答案 2 :(得分:5)
我将添加另一种方法: - )
unsafe struct FixedBufferExample
{
public fixed byte Buffer[128 * 1024]; // This is a fixed buffer.
}
现在这个结构是128kb :-)如果你声明一个类型为FixedBufferExample
的局部变量(不使用yield或async的方法),它应该使用128kb的堆栈。你可以很快用完你的筹码。
答案 3 :(得分:-2)
在您的财产内部调用您的财产(这是递归,但它是如此常见,我不得不提及它):
int MyProperty
{
set { MyProperty = value; }
}