2011-10-10 46 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

相關問題