85.函数调用过程栈的变化,返回值和参数变量哪个先入栈?

85.函数调用过程栈的变化,返回值和参数变量哪个先入栈?

1.将函数的参数压入栈中。参数的压入顺序与调用约定有关,可以是从右到左,也可以是从左到右。而在大多数C/C++编译器中,在函数调用的过程中,函数的参数是 *由右向左*入栈的;

2.将当前函数的返回地址压入栈中。返回地址是指函数调用结束后回到调用点的地址。

3.将当前函数的栈帧(Stack Frame)压入栈中。栈帧包括本地变量、临时变量、函数的返回值等信息。栈帧的大小取决于函数中定义的变量和数据类型。

4.跳转到函数的入口点开始执行函数代码。

5.函数执行完毕后,将返回值存放在寄存器中(或者放在栈内存中),然后将栈帧弹出,恢复返回地址,跳转回调用点。

在返回之前,可以进行一些清理工作,例如释放内存、关闭文件等。

需要注意的是,函数调用过程中,栈的变化是动态的,每次函数调用都会增加栈的深度,而函数返回时栈的深度又会减少。如果递归调用函数,栈的深度会不断增加,直到达到一定限制,例如栈溢出。因此,在编写程序时,需要注意函数调用的次数和深度,避免出现栈溢出等问题。
————————————————
版权声明:本文为CSDN博主「WAWA鱼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51282224/article/details/129739740

posted @ 2023-07-11 15:19  CodeMagicianT  阅读(593)  评论(0编辑  收藏  举报