2 回答

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