當程式執行上述程式碼的時候,程式不會有任何問題。
但是當我們執行下邊的程式碼的時候,程式就會崩潰。
什麼原因呢?棧不夠用了!
分析一下彙編程式碼:
當 test
被呼叫的時候:
- push 入棧
sp
指標sub
,減0x20
。即 sp 暫存器的值減 32 。(棧空間是從高地址向低地址的)(sp 暫存器裡面儲存的值是棧頂的地址)sp
指標add
,加0x20
。即 sp 暫存器的值加 32 ,恢復到之前的數值。- 函式返回。
所以,這個 test
每次被呼叫的時候都會佔用 32 位元組的棧空間,函式返回之前,它會恢復。因為我們遞迴呼叫它一直沒有返回,所以會導致棧不夠用。
有的函式時不會有棧空間的。
葉子函式--最後一個函式,它不會再呼叫其它的函式。