有人告诉我,每种方法都有1MB大小的堆栈。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中试过,但没有抛出异常。如何在不使用递归的情况下故意触发StackOverflowException?
那么,如何在不使用递归的情况下故意触发StackOverflowException呢?
有人告诉我,每种方法都有1MB大小的堆栈。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中试过,但没有抛出异常。如何在不使用递归的情况下故意触发StackOverflowException?
那么,如何在不使用递归的情况下故意触发StackOverflowException呢?
我会添加其他方法:-)
unsafe struct FixedBufferExample
{
public fixed byte Buffer[128 * 1024]; // This is a fixed buffer.
}
现在这个结构是128KB :-)如果您声明一个局部变量(即不使用产量的方法或异步)FixedBufferExample
它应该类型使用128kb的堆栈。你可以很快用完你的堆栈。
啊,那会做; p –
stackalloc
可能是最简单的方法(假设你要运行抛出错误,而不是你自己):
unsafe void Boom()
{
int* data = stackalloc int[512 * 1024]; // 2MB
}
是否有任何区别,如果使用64位系统?堆栈更大吗? – Yahia
@Yahia很好的问题; p –
打电话给你的财产里面你的财产(它是递归的,但它很常见我不得不提到它):
int MyProperty
{
set { MyProperty = value; }
}
他已经提到**触发StackOverflowException而不使用递归**,那么这个数字在这里如何呢? – V4Vendetta
256 * 4字节= 1kb,而不是1MB –
256个整数= 256 * 4字节= 1024字节= 1kb,而不是1MB。因此,你需要256000个整数。我甚至不会尝试写256000声明的代码。 (编辑:和Marc Gravells总是更快):) –
哦,我的坏,对不起。 – CuiPengFei