我们说我们有两个整数a和b。交换价值的方式更快?
c=a;
a=b;
b=c;//(edited typo)
或
a=a+b;
b=a-b;
a=a-b;
或按位xor
a=a^b;
b=a^b;
a=a^b;
我能够测试其性能差异,但我现在想知道它。是按位吗?
答案 0 :(得分:1)
首先,您无法量化独立于程序语言,编译器和运行它的平台的算法速度。算法是一种数学抽象。
说完了:
第一个版本通常更快,因为它通常会编译为更少的本机指令,执行时间周期更短。第一个版本只需要加载和保存操作。其他两个版本(至少)具有相同数量的加载和保存,以及一些额外的算术或位操作指令。
然而,即使这样也不是干涸的。
第2和第3个示例在不使用临时变量的情况下执行交换。如果使用额外的临时变量是昂贵的,那么您可能会这样做。这可能发生在没有提供足够通用寄存器的机器上,并且加载/保存到内存的相对成本很高。在某些情况下,本机代码等价物可能是最佳的。
然而......这才是真正意义上的......最好的策略是将这种决定留给编译器。除非您准备投入大量精力进行微优化,否则编译器可能会比您更好地完成工作。确实,用狡猾的方式编写代码&#34;可能会使编译器难以优化。 (例如,在第三种情况下,编译器需要弄清楚该序列实际上是在替换最佳指令序列之前交换2个变量。有可能优化器无法做到这一点。)< / p>