C语言中,函数的活动和栈有关。
栈是先进后出的数据结构。栈是由底端向顶端生长,栈顶加入数据称为压栈、入栈,栈顶弹出数据称为出栈。
def add(x, y):
r = x + y
print(r)
return r
def main():
a = 1
b = add(a, 2)
return b
main()
- main 调用,在栈顶创建栈帧
- a=1 ,在 main栈帧中增加 a,堆里增加1,a指向这个1
- b=add(a,2),等式右边先执行,add函数调用
- add调用,在栈顶创建栈帧,压在main栈帧上面
- add栈帧中增加2个变量,x变量指向1,y指向堆中新的对象2
- 在堆中保存计算结果3.并在add栈帧中增加r指向3
- print函数创建栈帧,实参r被压入print 栈帧中
- print函数执行完毕,函数返回,移除栈帧
- add函数返回,移除栈帧
- main栈帧中增加b指向add函数的返回值对象
- main函数返回,移除栈帧
每一次函数调用都会创建一个独立的栈帧入栈。