详解函数的调用过程

·代码示例

我们用一段简单的代码来进行测试,代码如下:

int Add(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}

int main()
{
	int a = 10;
	int b = 20;
	int ret = 0;
	ret = Add(a, b);
	printf("ret=%d\n", ret);
	system("pause");
	return 0;
}

我们用vs进入调试,打开【调用栈堆】后会发现main函数在__tmainCRTStartup函数中被调用,而__tmainCRTStartup函数则是在mainCRTStartup中被调用,这两个在后面的说明中就保留mainCRTStartup入口。

我们都知道函数在被调用的过程中,每一次调用都要开辟一块内存空间。那么这一块内存空间是由谁来进行维护的呢?我们会答是由操作系统来完成维护的,但是这还并不准确,那么我们就要了解一下寄存器的概念。

·什么是寄存器

寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令数据地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,寄存器有累加器(ACC)。——来自百度百科

看完概念以后,我们再去想,一个函数如果要去返回一个值,但是被调用的函数销毁后是什么来存储这个值的。其实也是寄存器,这样的话其实也就不难理解了。并且我们下面对于函数调用的理解也离不开寄存器。

·函数调用过程

·mian函数

我们进入调试转入到反汇编同时打开监视和内存。如下图:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值