1:出现原因:

栈是为了函数间的调用服务的

2:数据结构

栈的数据结构是 LIFO  last in first out 后进先出的

3:物理

就是开辟的一段内存空间,栈底在上 内存大地址,栈顶在下 内存小地址,所以我们经常会说 栈指针地址变大是在释放空间 而变小是分配了新的空间

4:程序中的栈应用

我们写程序的时候,经常会把一个功能封装为一个方法,然后在使用的地方调用这个方法,这种函数也可以说方法间的调用就会用到栈了。

程序执行到某行,要去调用下一个方法,那我们如何保证执行完再回来当前方法呢。cpu是拿寄存器上的地址去执行指令,我们要把要调用的方法的第一行地址放到pc上,等cpu去执行,pc上放着的原来的下一条指令-当前方法的下一个指令 要压入栈中,不然就丢失了,记录无法回到当前方法了,当被调用的方法执行完毕后就会释放压入栈的指令还给pc,那cpu又接着执行。

对于简单的方法间调用,比如被调用的方法没有再调用其他方法,那也可以通过函数内联来实现调用,就是把被调用的方法程序指令直接插入到当前方法,节省了出入栈的性能,这个是编译器可以优化的,也可以在函数上inline来实现-对C来说。

找到那个感觉 就算打开了那个脑洞

本文来自博客园,作者:xiao~xiao,转载请注明原文链接:https://www.cnblogs.com/angin-iit/p/11474456.html

原文地址:https://www.cnblogs.com/angin-iit/p/11474456.html