我想交换两个整数,我想知道这两种实现中哪一种会更快: 使用临时变量的明显方法:
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
或者我相信大多数人都见过的异或版本:
void swap(int* a, int* b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
第一个似乎使用了一个额外的寄存器,但第二个进行了三个加载和存储,而第一个只进行了两次。有人可以告诉我哪个更快,为什么?为什么更重要。
最佳答案
第 2 种方法经常被引用为“聪明”的做法。它实际上很可能更慢,因为它掩盖了程序员的明确目标——交换两个变量。这意味着编译器无法优化它以使用实际的汇编程序操作进行交换。它还假定能够对对象执行按位异或。
坚持第 1 点,这是最通用和最容易理解的交换,可以很容易地模板化/通用化。
这个维基百科部分很好地解释了这些问题: http://en.wikipedia.org/wiki/XOR_swap_algorithm#Reasons_for_avoidance_in_practice
关于c - 在 C 中交换值的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36906/