2015-02-11 61 views
0

可能是我的問題不相關,它可能不會發生,因爲堆棧有1MB的內存。如果堆棧內存變滿,會發生什麼情況

但是如果堆棧內存變滿,會發生什麼情況。因爲垃圾收集器不會執行堆棧清理。

+2

請檢查本網站的名稱。這是堆棧變滿時發生的情況。 – 2015-02-11 11:00:54

回答

1

這是很容易溢出堆棧:

int* ptr = stackalloc int[4000000]; 

一個StackOverflowException發生。

1

我絕對不是專家,但我的猜測是StackOverflowException

雖然我認爲你不會填滿整個1MB堆棧。

+1

如果你有一個方法(直接或間接)調用它自己並且實際上沒有任何進展,這很容易。 – 2015-02-11 11:04:50

2

堆棧填滿時,會出現StackOverflowException異常。

當然,如果你的代碼有一個導致失控遞歸的錯誤,或者如果你使用遞歸來實現一個不適合遞歸的算法,比如線性搜索,堆棧可能會被填滿。

你可以非常容易地檢查,像這樣失控的遞歸會發生什麼:

static void Main(string[] args) 
{ 
    Main(args); 
} 
相關問題