有人告訴我,每種方法都有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