And*_*yuk 9 compiler-construction
学习编译器课程,我想知道为什么要使用寄存器.通常情况下,调用者或被调用者必须保存寄存器值然后将其恢复.
在某种程度上,他们总是最终使用堆栈.使用寄存器真的值得创造额外的复杂性吗?
请原谅我的无知.
更新:请知道,寄存器比RAM和其他类型的缓存更快.我主要担心的是,必须"保存"寄存器中的值,然后将其"恢复"到寄存器中.在这两种情况下,我们都在访问某种缓存.首先使用缓存不是更好吗?
在速度/延迟层次结构中,寄存器最快(通常是零周期延迟),L1缓存是下一个(通常是1个或更多个延迟周期),然后在此之后迅速下降.因此,通常寄存器访问是"免费的",而存储器访问中总会涉及一些成本,即使缓存该访问也是如此.
保存和恢复寄存器通常只发生在(a)函数调用或上下文切换的开始/结束时,或(b)当编译器用完临时变量的寄存器并需要将一个或多个寄存器"溢出"回存储器时.通常,优化良好的代码将大多数频繁访问("热")变量保留在寄存器中,至少在函数的最内层循环中.