在汇编中,x++是否比x=x+1和x++=1更有效率



我对Microchip PIC微控制器的组装编程有所了解,但我不是专家。

有人能给我解释一下以下3种说法中哪一种在组装中最有效(即耗时更少)吗。

x++
x = x + 1
x += 1

我对C#和Java都很熟悉,我确信当我们考虑高级编程语言时,上面3条语句的效率没有什么不同。但是,当我们考虑组装时,效率是否存在差异?

感谢

这些不是汇编语句,您在错误的抽象级别上工作。

要想弄清楚哪一个C类语句更快,需要将它们编译成程序集,然后再检查

任何一个无脑的编译器都会为这三种情况提供完全相同的代码。

如果你一个死脑筋的编译器,那么,是的,几乎肯定会有区别,比如:

inc  [memloc]

和:

lod  r1, [memloc]
inc  r1
sto [memloc], r1

当我们考虑高级编程语言时,上面3条语句的效率没有差异

这取决于你对"高水平"的定义。在Python或Ruby等脚本语言中,我希望x++的性能优于x += 1x = x + 1,因为x的符号表查找最少,而且不必"开箱"标量(将脚本语言1转换为程序集1)。

然而,对于像C这样的编译语言,我希望这三个语句都能产生类似的汇编代码,所以它们应该同样高效。然而,这取决于编译器及其配置,例如,如果您正在执行"调试"或"发布"构建。

编译器现在足够聪明,可以找到最佳解决方案,所以实际上都是一样的。编译器会将它们转换为最快的汇编命令。所以别想这个。如果您正在编写C#或Java代码,这是您最不应该考虑的事情。

如果你在问,当在高级语言中使用时,它们是否同样有效:假设你使用了任何相当不错的编译器,它们会的。

如果你在问,如果使用类似于上述语句的三种不同的汇编指令会同样快,那么可能不会。如果你的CPU有特殊的"inc"指令,那么它可能比其他指令快一点,如果不考虑其他因素的话(现代CPU通常只需要一个周期来处理这样简单的指令),因为指令可能更短,这需要CPU从内存中传输更少的代码。要确定的是,您应该查看指令集手册,其中经常指定时间。对于某些体系结构,您还可以获得周期精确的模拟器,它应该能够回答这些类型的问题。

相关内容

  • 没有找到相关文章

最新更新