比如说,你有一个变量c
,由于CPU的优化,你可以安全地假设存储在一个寄存器中。以下哪项更快?
c = getchar();
if( c == 033 ){
putchar( 033 );
…
}
或
c = getchar();
if( c == 033 ){
putchar( c );
…
}
我猜第一个会更快,因为它使用立即寻址而不是寄存器访问。我的假设是否正确?
答案 0 :(得分:0)
这不会产生太大影响,因为这只是一个片段。相反,我会说当我们编写putchar(c)时它会更好用,因为这是编译器训练得更多的东西。
答案 1 :(得分:0)
它在很大程度上取决于指令集和立即vs寄存器,寄存器可能稍微慢了一两个时钟,因为你需要立即或负载才能将它送入寄存器。除非指令集是可变长度的,否则它会在指令中,并且可能会花费你指令周期。
无论如何,putchar会淹没这个,数百到数千个时钟周期,而不是你想要保存的一两个。
某些指令集对立即数有限制。所以这是依赖于指令集然后依赖于应用程序。