2012-01-18 106 views
6

我最近遇到了一個「linux stack」和「linux stack size」的bug。我碰到一個博客指揮我來試試什麼是Linux堆棧?

ulimit -a 

,看看有什麼我的框限,它被設置爲8192kb這似乎是默認的。

什麼是「linux堆棧」?它是如何工作的,它存儲了什麼,它有什麼作用?

+3

http://en.wikipedia.org/wiki/Call_stack – 2012-01-18 04:50:37

+0

堆棧溢出可能與過深(或無窮大)遞歸出現。或者可能通過在C代碼中濫用'alloca'(或等效的,如可變長度數組)。 – 2012-01-18 05:59:54

+0

相關:http://stackoverflow.com/questions/17671423/stack-allocation-for-process | http://unix.stackexchange.com/questions/145557/how-does-stack-allocation-work-in-linux/239323#239323 – 2016-04-05 09:41:46

回答

7

簡短的回答是:

當程序在你的Linux中運行,他們添加和刪除定期的程序功能,從the stack數據。堆棧大小反映堆棧在內存中分配了多少空間。如果增加堆棧大小,則允許程序增加可以調用的例程數量。每次調用函數時,都可以將數據添加到堆棧中(堆積在最後一個例程數據的頂部)。

除非程序非常複雜,或者爲特殊目的而設計,堆棧大小爲8192kb通常很好。某些程序如圖形處理程序要求您增加堆棧的大小以便運行。因爲他們可能會在堆棧上存儲大量數據。

隨意增加這些應用程序的堆棧大小,這不是問題。要做到這一點,使用

ulimit -s bytes

BTW,What is a StackOverflowError?

+0

非常感謝您的回答。我在Ruby應用程序中遇到了'SystemStackError:stack level too deep'錯誤,並希望在繼續調查之前更好地理解基礎知識。 – jaredonline 2012-01-18 20:27:46