当程序执行上述代码的时候,程序不会有任何问题。
但是当我们执行下边的代码的时候,程序就会崩溃。
什么原因呢?栈不够用了!
分析一下汇编代码: 当 test
被调用的时候:
- push 入栈
sp
指针sub
,减0x20
。即 sp 寄存器的值减 32 。(栈空间是从高地址向低地址的)(sp 寄存器里面存储的值是栈顶的地址)sp
指针add
,加0x20
。即 sp 寄存器的值加 32 ,恢复到之前的数值。- 函数返回。
所以,这个 test
每次被调用的时候都会占用 32 字节的栈空间,函数返回之前,它会恢复。因为我们递归调用它一直没有返回,所以会导致栈不够用。
有的函数时不会有栈空间的。
叶子函数--最后一个函数,它不会再调用其它的函数。