2 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
它是否優(yōu)化可能取決于您未顯示的其他代碼,以及編譯器版本/目標(biāo)體系結(jié)構(gòu)。雖然我懷疑何時涉及并發(fā)和其他函數(shù)調(diào)用,但性能瓶頸將是int
=>int64
轉(zhuǎn)換。如果取消該轉(zhuǎn)換,您很可能不會看到任何差異。
另請注意,如果您使用的體系結(jié)構(gòu)是 64 位,則int
和的大?。ㄒ约皟?nèi)存表示和解釋)int64
是相同的,這意味著轉(zhuǎn)換不會產(chǎn)生任何成本,它只是更改類型(如何解釋)。
編輯:由于您無論如何都在使用睡眠,因此擺脫轉(zhuǎn)換是沒有意義的。使用使您的代碼更具可讀性的任何一個。

TA貢獻1844條經(jīng)驗 獲得超8個贊
Go amd64 匯編器:
0000000000457bb0 <main.Equality>:
? 457bb0:? ?48 8b 44 24 08? ? ? ? ? mov? ? 0x8(%rsp),%rax
? 457bb5:? ?48 8b 4c 24 10? ? ? ? ? mov? ? 0x10(%rsp),%rcx
? 457bba:? ?48 39 c8? ? ? ? ? ? ? ? cmp? ? %rcx,%rax
? 457bbd:? ?0f 94 44 24 18? ? ? ? ? sete? ?0x18(%rsp)
? 457bc2:? ?c3? ? ? ? ? ? ? ? ? ? ? retq
正如預(yù)期的那樣,速度很快。
編譯器知道,對于 amd64,int
與int64
.?無需轉(zhuǎn)換。
opt.go
:
package main
//go:noinline
func Equality(a int64, b int) bool {
? ? return a == int64(b)
}
func main() {
? ? var a, b = int64(42), int(39)
? ? println(Equality(a, b))
}
傾倒:
$ go build opt.go
$ objdump -d opt > opt.dump
- 2 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報