2 回答

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

TA貢獻1844條經驗 獲得超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
正如預期的那樣,速度很快。
編譯器知道,對于 amd64,int
與int64
.?無需轉換。
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 關注
- 159 瀏覽
添加回答
舉報