相关疑难解决方法(0)

带有和不带辅助变量的可变交换 - 哪个更快?

我想你们都听说过"交换问题"; 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)

c assembly swap

5
推荐指数
1
解决办法
1775
查看次数

标签 统计

assembly ×1

c ×1

swap ×1