立即寻址比寄存器访问更快吗?

时间:2017-02-06 18:45:35

标签: c assembly addressing-mode

比如说,你有一个变量c,由于CPU的优化,你可以安全地假设存储在一个寄存器中。以下哪项更快?

c = getchar();
if( c == 033 ){
    putchar( 033 );
    …
}

c = getchar();
if( c == 033 ){
    putchar( c );
    …
}

我猜第一个会更快,因为它使用立即寻址而不是寄存器访问。我的假设是否正确?

2 个答案:

答案 0 :(得分:0)

这不会产生太大影响,因为这只是一个片段。相反,我会说当我们编写putchar(c)时它会更好用,因为这是编译器训练得更多的东西。

答案 1 :(得分:0)

它在很大程度上取决于指令集和立即vs寄存器,寄存器可能稍微慢了一两个时钟,因为你需要立即或负载才能将它送入寄存器。除非指令集是可变长度的,否则它会在指令中,并且可能会花费你指令周期。

无论如何,putchar会淹没这个,数百到数千个时钟周期,而不是你想要保存的一两个。

某些指令集对立即数有限制。所以这是依赖于指令集然后依赖于应用程序。