2016 - 2024

感恩一路有你

函数调用栈的工作过程 函数调用过程中栈到底是怎么压入和弹出的?

浏览量:1518 时间:2021-03-16 22:39:13 作者:admin

函数调用过程中栈到底是怎么压入和弹出的?

例如:void fun(int a,int b,int c)调用fun(1,2,3)时:-将断点的程序指针按入堆栈-依次按入堆栈3,2,1,并指定指向堆栈的参数变量指针。参数存储位置是参数变量位置-按堆栈保存站点-执行函数-弹出堆栈恢复站点-堆栈指针减去参数占用的字节数,丢弃堆栈中的参数—捕捉堆栈断点的程序指针加上调用语句的字节数,并继续执行

例如:调用fun(1,2,3)时void fun(int a,int b,int c):将断点的程序指针按入堆栈—按3,2,1按顺序插入堆栈,并指定指向堆栈的参数变量指针。参数存储位置是参数变量位置-按堆栈保存字段-执行函数-弹出堆栈恢复字段-堆栈指针减去参数占用的字节数,丢弃堆栈中的参数-弹出断点的程序指针加上调用语句的字节堆栈是一个实现“后进先出”算法的数据结构。堆栈就是这样一种数据结构。它是在内存中打开一个存储区域,并将数据一个一个地存储在这个区域中(即“推送”)。地址指针总是指向最后一个数据被推入堆栈的数据单元。存储地址指针的寄存器称为堆栈指示符。开始放入数据的单元称为堆栈的底部。数据逐个存储。这个过程叫做“叠压”。在压栈过程中,压入栈中的每一个数据都放在与上一个单元相连的下一个单元中,栈指示符中的地址自动增加1。读取数据时,根据堆栈指示符中的地址读取数据,堆栈指示符中的地址数自动减少1。这个过程称为弹出窗口。这样就实现了后进先出的原则。最基本的操作模式是stack-in和stack-out

stack实际上是两种数据结构。

堆栈是一种数据结构,其中数据项按顺序排列。数据项只能在一端插入和删除(称为栈顶)。重点:堆、乱序。堆栈,后进先出。此数据结构有两种基本操作:堆栈压缩和弹出。在堆栈框架中,有两个标记:堆栈底部和堆栈顶部。堆栈顶部表示要推送或弹出的数据的地址,而堆栈底部表示堆栈帧中最后一个数据的内存地址。在Win32中,寄存器ESP存储指向堆栈底部的指针,并且堆栈正向低地址方向增长,因此ESP指向堆栈顶部。堆栈比较(操作系统):由编译器自动分配和释放,并存储函数的参数值和局部变量的值。它的操作类似于数据结构中的堆栈。堆栈使用一级缓存。它通常在被调用时在存储空间中,并在调用后立即释放堆(操作系统):它通常由程序员分配和释放。如果程序员不发布它,它可能会在程序结束时被操作系统回收。分配方法类似于链表。堆存储在二级缓存中,其生命周期由虚拟机的垃圾收集算法决定(不是一旦它成为孤立对象,它就可以被回收)。因此,调用这些对象的速度相对较低。Heap(数据结构):Heap可以看作是一个树,比如Heap sort stack(数据结构):后进先出的数据结构。不同的语言有不同的描述。您可以检查各种语言的API

函数调用栈的工作过程 函数栈帧的调用过程 栈的调用函数

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