寄存器在物理意义上是一个硬件,因此会有被复用的时候
当一个程序,不同的函数内存入局部变量时,
比如函数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对应的栈中,找到之前写入到寄存器内的数据。
文章讨论了在程序执行过程中,寄存器如何在不同函数间复用,以及如何通过栈来保存函数局部变量的状态。当函数A调用函数B时,A的局部变量被存储在寄存器中,然后被B的变量覆盖。然而,由于每个函数有自己的栈空间,所以在B调用结束后,A的栈能恢复其寄存器中的数据,确保返回到A时,局部变量的值保持不变。这种机制保证了函数调用的正确性。
3929

被折叠的 条评论
为什么被折叠?



