c - 即时寻址比寄存器访问更快



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

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

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

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

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

无论如何,putchar 都会淹没这个,数百到数千个时钟周期与您试图在这里保存的一两个时钟周期相比。

某些指令集对即时有限制。 因此,这非常依赖于指令集,然后依赖于应用程序。

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

最新更新