如何理解易失性和非易失性寄存器?
How to understand volatile and non-volatile registers?
CPU寄存器可以通过调用约定分为易失性和非易失性,volatile
这个词的含义如何暗示分类?
来自http://www.techopedia.com/definition/8591/non-volatile-register
易失性寄存器的内容可能会因子程序调用而改变。
非易失性寄存器是一种寄存器,其内容必须在子例程调用期间保留。每当例程更改非易失性寄存器的值时,必须在更改寄存器之前将旧值保存在堆栈中,并且必须在返回之前恢复该值。寄存器类似于变量,只是有固定数量的寄存器。每个寄存器都是 CPU 中的唯一位置,其中保存了单个值。寄存器是唯一可以执行加法、乘法、减法等数学函数的地方。寄存器通常保存指向内存的指针。在内存和寄存器之间移动值是一种常见现象。
换句话说,易失性寄存器是调用者保存的寄存器,而不是被调用者保存的。参见 https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2019#callercallee-saved-registers
CPU寄存器可以通过调用约定分为易失性和非易失性,volatile
这个词的含义如何暗示分类?
来自http://www.techopedia.com/definition/8591/non-volatile-register
易失性寄存器的内容可能会因子程序调用而改变。
非易失性寄存器是一种寄存器,其内容必须在子例程调用期间保留。每当例程更改非易失性寄存器的值时,必须在更改寄存器之前将旧值保存在堆栈中,并且必须在返回之前恢复该值。寄存器类似于变量,只是有固定数量的寄存器。每个寄存器都是 CPU 中的唯一位置,其中保存了单个值。寄存器是唯一可以执行加法、乘法、减法等数学函数的地方。寄存器通常保存指向内存的指针。在内存和寄存器之间移动值是一种常见现象。
换句话说,易失性寄存器是调用者保存的寄存器,而不是被调用者保存的。参见 https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2019#callercallee-saved-registers