第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編譯器是否優(yōu)化變量聲明?

編譯器是否優(yōu)化變量聲明?

Go
繁華開滿天機 2023-08-14 16:20:19
給定一個迭代: LOOP: for {              select {       case <-timeout:         t.Fatal("Timed out")       default:         if Count() == int64(num) {            break LOOP         }         time.Sleep(5 * time.Millisecond)       }    }Count()返回一個int64,所以我需要轉(zhuǎn)換和Count更改,所以我們在這里檢查直到Count()返回預(yù)期值 - 可能是數(shù)千次迭代。編譯器是否優(yōu)化此轉(zhuǎn)換?或者在開始循環(huán)之前預(yù)先將num在其他地方使用過的 asint和 not轉(zhuǎn)換為更好?int64
查看完整描述

2 回答

?
墨色風(fēng)雨

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)換是沒有意義的。使用使您的代碼更具可讀性的任何一個。


查看完整回答
反對 回復(fù) 2023-08-14
?
婷婷同學(xué)_

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,intint64.?無需轉(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


查看完整回答
反對 回復(fù) 2023-08-14
  • 2 回答
  • 0 關(guān)注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號