递归占用的栈帧大小(待验证)
int fact(int n) { //求n的阶乘 if(n < 0) return 0 else if (n == 0) return 1; else if (n == 1) return 1; else return n*fact(n-1); }
一般而言,在 X86 32位系统中,一次函数调用消耗的栈空间大约是:
4字节返回地址;
4*n字节的参数,n是参数个数;
12字节的寄存器保护区(EBP ESI EDI)
4*m字节局部变量,m 是声明在函数内部变量的个数
所以,对于楼主给出的实例,一次调用耗用的内存大小是
4+4*1+12=20字节
若递归 1000 次,大约耗 20KB 栈空间
若递归 10000 次,大约耗 200KB 栈空间