2 回答

TA貢獻1982條經(jīng)驗 獲得超2個贊
a, b := 10, 5
b, a = a, b
0x0028 00040 (swap.go:10) MOVQ $10, CX ; CX = 10
0x002f 00047 (swap.go:10) MOVQ $5, AX ; AX = 5
0x0036 00054 (swap.go:11) MOVQ CX, "".b+16(SP) ; b = CX or *(SP+16) = CX
0x003b 00059 (swap.go:11) MOVQ AX, "".a+24(SP) ; a = AX or *(SP+24) = CX
CX, AX, 和SP是寄存器。a和b分別是 SP+24 和 SP+16 處堆棧上的變量。

TA貢獻1786條經(jīng)驗 獲得超13個贊
它將常量 10 和 5 加載到 CPU 寄存器中,然后將寄存器存儲到為變量a和保留的堆棧位置b。
它相當(dāng)于:
CX := 10
AX := 5
b := CX
a := AX
請注意,一個不錯的優(yōu)化編譯器應(yīng)該將其優(yōu)化為將常量直接存儲到堆棧位置的代碼:
b := 10
a := 5
或者更好的是完全消除變量:
return []int{5, 10}
- 2 回答
- 0 關(guān)注
- 173 瀏覽
添加回答
舉報