C++函数调用的压栈过程

以例子进行讲解

#include <iostream>
using namespace std;

int f(int n) 
{
	cout << n << endl;
	return n;
}

void func(int param1, int param2)
{
	int var1 = param1;
	int var2 = param2;
	printf("var1=%d,var2=%d", f(var1), f(var2));//如果将printf换为cout进行输出,输出结果则刚好相反
}

int main(int argc, char* argv[])
{
	func(1, 2);
	return 0;
}
//输出结果
//2
//1
//var1=1,var2=2
  • 从入口函数main函数开始执行时,编译器会将操作系统的运行状态,main函数的返回地址、main的参数、mian函数中的变量、进行依次压栈;
  • 当main函数开始调用func()函数时,编译器此时会将main函数的运行状态进行压栈,再将func()函数的返回地址、func()函数的参数从右到左、func()定义变量依次压栈;
  • 当func()调用f()的时候,编译器此时会将func()函数的运行状态进行压栈,再将的返回地址、f()函数的参数从右到左、f()定义变量依次压栈
  • 函数f(var1)、f(var2)依次入栈,而后先执行f(var2),再执行f(var1),最后打印整个字符串,将栈中的变量依次弹出,最后主函数返回。

文字化表述

  • 从栈空间分配存储空间
  • 从实参的存储空间复制值到形参栈空间
  • 进行运算

原文链接: https://www.cnblogs.com/xiaoqing-ing/p/17140719.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++函数调用的压栈过程

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/319436

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月24日 下午3:18
下一篇 2023年2月24日 下午3:19

相关推荐