计算机程序用来放数据的地方有两种,一个是堆,一个是栈。栈一般用来放一些函数的临时变量,还有中断和调用函数时的返回地址。因为这些地址都是临时的,所以在栈的出栈和进栈的时候可以动态的进入和删除。调用函数和中断的时候,临时变量和返回地址就暂存在栈中。函数调用完了,临时变量和返回地址就从栈删除了。所以栈一般来说是临时变量,调用函数会自动回收内存。这就是PUSH 和 POP 的功能了。相当于一个暂时保存数据的地方。 而堆的话一般用来动态分配内存,分配的内存一般不会自动释放。
计算机在运算的时候大部分情况会把数据放到寄存器里运算,而调用函数的时候,会有新的数值要使用这些寄存器,所以要把这些寄存器里的内容保存起来,就是保护现场。因为栈的先入后出非常适合这一操作,所以每次函数调用前都有入栈操作,函数返回是出栈还原现场