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),这是最快的,还是有其他更快的?
问题是现代CPU架构不会让你得到这个答案.它们会隐藏许多效果,并会暴露许多非常微妙的效果.
如果你有CPU寄存器中的值并且你有一个备用寄存器,那么这种temp方式可能是最快的方式,也可能是消耗最少功率的方式.
使用XOR或+/-(非常简洁!)方法适用于您无法承担额外位置(额外内存变量或额外寄存器)的情况.这可能看起来很奇怪,但在C预处理器宏中,例如,不能(轻松地)声明新变量.
当变量在内存中时,所有变体在任何高性能CPU上的行为都很可能相同.即使编译器没有优化代码,CPU也会避免几乎所有的存储器访问,并使它们像寄存器访问一样快.
总的来说,我倾向于说:不要担心速度.在这个级别进行优化并不重要.尽量避免交换,这将是最快的!