2016 - 2024

感恩一路有你

为什么入栈top减一 C语言中函数调用为什么会出现栈?

浏览量:2199 时间:2021-03-12 02:44:16 作者:admin

C语言中函数调用为什么会出现栈?

是不是调用函数的形参过多?一般来说,函数的参数都存在栈中,当然也可以申请堆。如果形参过多就会发生栈溢出,用递归的时候发生较多。栈溢出会发生段错误,也就是可能会占用系统的栈(好像不能访问)。。。错了给我说……

栈用来调用函数时保护断点,局部变量为什么也入栈?

局部变量压在栈里,是为了释放更多的寄存器,可以灵活得使用寄存器实现具体运算。当运算不需要引用局部变量的时候,局部变量就在栈里,当运算需要局部变量的时候,就从栈里取出局部变量的值到寄存器里。

局部变量也常驻寄存器,就是在定义局部变量的时候加register修饰。

栈有个栈顶指针寄存器SP,压栈的时候,可以通过SP进行一定的偏移(这些偏移量在编译的时候就已经确定下来了,不会在运行的时候找不到)来得到某个局部变量存放的位置,从而从这个位置读取局部变量的值,并不要通过出栈操作来获取他们的值。

为什么常用于函数调用的数据结构是栈而不是队列?

堆栈的先入后出式操作顺序适用于函数的嵌套调用,队列先入先出则不适用比如:(堆栈的操作是在栈顶完成的)main函数调用A函数,现场参数压栈,栈结构:【[栈顶][调用A现场][栈底]】A函数再调用B函数后:【[栈顶][调用B现场][调用A现场][栈底]】当从B返回时,在栈顶可以拿到刚才入栈的[调用B现场]参数,从A返回时,[调用A现场]参数这回到了栈顶,正好使用;如果是队列,则是这样的:【[队列入口][调用B现场][调用A现场][队列出口]】当要从B返回时,在队列出口的是[调用A现场]参数,无法适用所以栈的结构是适用于嵌套调用、循环这些算法的数据结构。

为什么入栈top减一 堆区和栈区的区别 为什么栈支持子程序调用

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。