千万里不及你
反汇编表明 CPU 必须足够聪明才能看到正在发生的事情并使用寄存器来避免覆盖内存中的现有值。这个问题让我对Golang有了更多的了解,谢谢!要弄清楚编译器如何生成本机代码,我们需要查看它生成的汇编代码,这些代码由链接器转换为机器代码。我写了一个小 Go 程序来帮助解决这个问题:package mainimport "fmt"func main() { fmt.Println(myfunction())}func myfunction() []int { a, b := 10, 5 b, a = a, b return []int{a, b}}使用go tool compile -S > swap.s,然后我CTRL - F'd for myfunction(这是该名称的重点:易于搜索),并找到了这四行,它们对应myfunction于 Go 代码中的前两行:(注意这是针对我的 64 位机器;输出将在其他架构(如 32 位)上有所不同)0x0028 00040 (swap.go:10) MOVQ $10, CX ; var a = 100x002f 00047 (swap.go:10) MOVQ $5, AX ; var b = 50x0036 00054 (swap.go:11) MOVQ CX, "".b+16(SP) ; copy a to *b+160x003b 00059 (swap.go:11) MOVQ AX, "".a+24(SP) ; copy b to *a+24 Go 的反汇编对调试非常有帮助 :D