栈是一块内存空间,用于保存数据,一般用于函数调用保存程序运行的现场和参数。举例来说:
函数调败枣宏用:fun(a,b,c);
系统会将当前程序的执行点的位置进行压栈处理,即保存当前程序指针(程序运行位置),按照参数的顺序将a,b,c的数值也压入堆栈,以便传送给被调用的函数然后跳转到调用的函数入口;
调用函数将自己将要用到的寄存器和一些系统指针压入栈保存,然后从栈取得这些参数进行运算,退出时将保存的寄存器和系统指针从栈中弹出,然后岩悉舍弃栈中的参数,利用栈中保存的程序运行位置指针返回调用点
返回调用点后,由于函数的上述压栈保护和恢复现场工作,调用函数的运行环境一点也没有被函数运行破坏,继续向下面运行。
在c语言中,编译系统自动将上述堆栈操作的语句替你添加上,而汇编程序设计时,这些堆栈操作就要察册程序设计者来完成了,如果有遗漏或栈操作顺序不对将引起相关运行错误。
首先要说的是,栈的实现方式是一种后入先迅闭巧出的数据结构,存态森在于内存中。
栈的作用是保存你使用的变量和函数参数等等。
这么做的意义当然是有效的管理这些变量,否则在内存中的茫茫大海,你亩键如何找到属于自己的变量呢?
CPU在执行的时候,需要寄存器配合工作,而我们写的程序一般都不是一个函数到底的,总有些子函数调用,在跳转到子函数的时候,运行环境就变了,所以需要有一个地方保存这些寄存器的余枯值及相关的数据,所以就用卖毁郑到了栈,在跳转之前先存到栈里,子函数结束时,再中颂从栈里把这些数据恢复出来。
栈好比是一段内存空间,存放数据(他的作用)的一段内存空间.
