我想你们都听说过"交换问题"; SO充满了关于它的问题.不使用第三个变量的交换版本通常被认为更快,因为你有一个变量更少.我想知道窗帘后面发生了什么,并编写了以下两个程序:
int main () {
int a = 9;
int b = 5;
int swap;
swap = a;
a = b;
b = swap;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和没有第三个变量的版本:
int main () {
int a = 9;
int b = 5;
a ^= b;
b ^= a;
a ^= b;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用clang生成了汇编代码,并将其用于第一个版本(使用第三个变量):
...
Ltmp0:
movq %rsp, %rbp
Ltmp1:
movl $0, %eax
movl $0, -4(%rbp)
movl $9, -8(%rbp)
movl $5, -12(%rbp)
movl -8(%rbp), %ecx
movl %ecx, -16(%rbp)
movl -12(%rbp), …Run Code Online (Sandbox Code Playgroud)