Go 中函數內聯的編譯器邏輯
在Go 中,與C 不同,編譯器自動決定哪些函數適合內聯。儘管有一個偵錯選項可以觀察潛在的內聯,但有關 Go 編譯器使用的確切標準的文件有限。
內聯最佳化
考慮需要執行重複對資料集進行循環,讓我們檢查下面的程式碼:
func Encrypt(password []byte) ([]byte, error) { return bcrypt.GenerateFromPassword(password, 13) } for id, data := range someDataSet { newPassword, _ := Encrypt([]byte("generatedSomething")) data["password"] = newPassword someSaveCall(id, data) }
注意事項內聯
要潛在地限定編譯器內聯的Encrypt函數,請考慮以下事項:
編譯器邏輯
Go 編譯器執行兩遍內嵌:
CanInline
:CanInline
:CanInline:此遍識別適合內聯的函數並保留其主體。 InlineCalls:此pass 擴展了函數體內可內聯函數的呼叫。 The可以使用「l」除錯標誌來調整內聯的積極性。 建議除非效能成為問題,否則通常建議依賴編譯器的預設內聯行為。但是,如果需要顯著提高效能,請考慮手動內聯頻繁呼叫的小型函數,以最大限度地減少開銷。以上是Go編譯器如何決定何時內聯函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!