线程共享资源之寄存器

文章讨论了在程序执行过程中,寄存器如何在不同函数间复用,以及如何通过栈来保存函数局部变量的状态。当函数A调用函数B时,A的局部变量被存储在寄存器中,然后被B的变量覆盖。然而,由于每个函数有自己的栈空间,所以在B调用结束后,A的栈能恢复其寄存器中的数据,确保返回到A时,局部变量的值保持不变。这种机制保证了函数调用的正确性。
摘要由CSDN通过智能技术生成

寄存器在物理意义上是一个硬件,因此会有被复用的时候

当一个程序,不同的函数内存入局部变量时,

比如函数A和函数B

函数A写入A中的局部变量到寄存器,

在函数A中调用函数B,

函数B将函数B内局部变量写入到寄存器

此时,很明显的之前,函数A写入到寄存器中的内容被B新写入的变量覆盖了,

但为什么在当我们调用结束后,返回函数A之后,打印A中定义的局部变量,还是能够得到之前A中定义的值呢?

这是由于,当我们掉用函数B之前,函数A将他的变量写入寄存器后,会将其写入到寄存器内的数据记录在函数A所对应的栈中。(这个角度思考,似乎被A使用了的寄存器就是A的?)

同理当我们调用函数B时,B中写入在寄存器的变量,也被B对应的栈保存了。

由于栈是不被共享的空间,由此当函数B调用完回到函数A后,在A函数内打印其内的局部变量值,会在A对应的栈中,找到之前写入到寄存器内的数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值