将变量复制到另一个变量的最快方法是什么?

fun*_*err 1 memory performance copy cpu-registers

可以说我有2个变量.

x = 1  
y = 2  
Run Code Online (Sandbox Code Playgroud)

最终结果应该是:

x = 2  
y = 1  
Run Code Online (Sandbox Code Playgroud)

我想到了以下方法:

temp = x // clone x
x = y
y = temp
Run Code Online (Sandbox Code Playgroud)

或(XOR交换)

x = x XOR y
y = x XOR y
x = y XOR x
Run Code Online (Sandbox Code Playgroud)

我想得到关于低级别内存等的答案......
最快的方法是什么?

注意:
我想得到一个奖金答案,假设没有副作用(代码,cpu),这是最快的,还是有其他更快的?

Joh*_*ann 6

问题是现代CPU架构不会让你得到这个答案.它们会隐藏许多效果,并会暴露许多非常微妙的效果.

如果你有CPU寄存器中的值并且你有一个备用寄存器,那么这种temp方式可能是最快的方式,也可能是消耗最少功率的方式.

使用XOR或+/-(非常简洁!)方法适用于您无法承担额外位置(额外内存变量或额外寄存器)的情况.这可能看起来很奇怪,但在C预处理器宏中,例如,不能(轻松地)声明新变量.

当变量在内存中时,所有变体在任何高性能CPU上的行为都很可能相同.即使编译器没有优化代码,CPU也会避免几乎所有的存储器访问,并使它们像寄存器访问一样快.

总的来说,我倾向于说:不要担心速度.在这个级别进行优化并不重要.尽量避免交换,这将是最快的!