gpt4 book ai didi

c++ - 使用寄存器交换值

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:36 25 4
gpt4 key购买 nike

我一直在阅读有关在不使用临时变量的情况下交换变量内容的信息,除了著名的异或算法外,我还从 x86 上的汇编中发现了 XCHG 指令。所以我写了这段代码:

void swap(int *left, int *right){
__asm__ __volatile__(
"movl %0, %%eax;"
"movl %1, %%ebx;"
:
: "r" (*left), "r" (*right)
);
__asm__ __volatile__(
"xchg %eax, %ebx;"
);
__asm__ __volatile__(
"movl %%eax, %0;"
"movl %%ebx, %1;"
: "=r" (*left), "=r" (*right)
);}

它确实有效,但后来我意识到根本不需要 XCHG 指令。

void swap(int *left, int *right){
__asm__ __volatile__(
"movl %0, %%eax;"
"movl %1, %%ebx;"
:
: "r" (*left), "r" (*right)
);
__asm__ __volatile__(
"movl %%ebx, %0;"
"movl %%eax, %1;"
: "=r" (*left), "=r" (*right)
);}

第二个函数也有效,但似乎没有人提到使用寄存器交换变量,所以这段代码是否被认为是错误的,实际上它并没有真正正常工作?我错过了什么吗?

我知道这只适用于 x86,但由于大多数人都有一个英特尔 x86 处理器,这个代码可以用于任何现实世界的编程吗?我意识到这可能不会比使用临时变量进行常规交换快,但我是从理论上的角度问的。如果在测试或面试期间有人要求我用 C 编写一个函数来交换 x86 机器的值而不使用临时变量,那么这段代码是有效的还是完全是废话?谢谢你。

最佳答案

有效,是的。按照我的标准,你是一个没有雇用的人。

为什么?成本。

std::swap 可以很好地完成这项工作,而且速度可能足够快。您的代码将有更高的维护成本。

出于性能方面的考虑,有时肯定会使用汇编程序。
这不是其中之一。

关于c++ - 使用寄存器交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com