2011-10-10 47 views
7

有人告诉我,每种方法都有1MB大小的堆栈。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中试过,但没有抛出异常。如何在不使用递归的情况下故意触发StackOverflowException?

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

+6

256 * 4字节= 1kb,而不是1MB –

+3

256个整数= 256 * 4字节= 1024字节= 1kb,而不是1MB。因此,你需要256000个整数。我甚至不会尝试写256000声明的代码。 (编辑:和Marc Gravells总是更快):) –

+0

哦,我的坏,对不起。 – CuiPengFei

回答

5

我会添加其他方法:-)

unsafe struct FixedBufferExample 
{ 
    public fixed byte Buffer[128 * 1024]; // This is a fixed buffer. 
} 

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

+1

啊,那会做; p –

19

使用

throw new StackOverflowException(); 
+0

+1。总是使用最简单的方法来获得你之后的结果? :) –

+0

是的 - 类似的东西:-) – Yahia

7

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

unsafe void Boom() 
    { 
     int* data = stackalloc int[512 * 1024]; // 2MB 
    } 
+1

是否有任何区别,如果使用64位系统?堆栈更大吗? – Yahia

+0

@Yahia很好的问题; p –

-2

打电话给你的财产里面你的财产(它是递归的,但它很常见我不得不提到它):

int MyProperty 
{ 
    set { MyProperty = value; } 
} 
+3

他已经提到**触发StackOverflowException而不使用递归**,那么这个数字在这里如何呢? – V4Vendetta

相关问题