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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Golang轉(zhuǎn)義分析中'leak/leaking param'是什么意思

Golang轉(zhuǎn)義分析中'leak/leaking param'是什么意思

Go
Qyouu 2022-11-23 20:40:55
func main() {        i1 := 1    A1(&i1)}func A1(i1 *int) *int {    return i1}而逃逸分析的結(jié)果是./main.go:18:9: parameter i1 leaks to \~r1 with derefs=0:./main.go:18:9:   flow: \~r1 = i1:./main.go:18:9:     from return i1 (return) at ./main.go:19:2./main.go:18:9: leaking param: i1 to result \~r1 level=0parameter i1 leaks to \~r1 with derefs=0和是什么意思leaking param: i1 to result \~r1 level=0首先我嘗試谷歌golang escape leaking,最相關(guān)的結(jié)果是在escape-analysis-shows-channel-as-leaking-param的評(píng)論中“你為什么那么想?” 可以合理地假設(shè)泄漏是壞的并且與其閥桿泄漏有關(guān)。我正在努力想出一個(gè)泄漏是一件好事的示例上下文,例如泄漏桶、泄漏油箱、泄漏、泄漏電容器、泄漏船、泄漏抽象。對(duì)于高性能 go 專(zhuān)家來(lái)說(shuō)這可能是顯而易見(jiàn)的,但對(duì)于我們其他人來(lái)說(shuō),鏈接到文檔并簡(jiǎn)要說(shuō)明泄漏參數(shù)指的是什么會(huì)很有幫助和我想問(wèn)的是同一個(gè)問(wèn)題,但是之后就沒(méi)有回復(fù)了。然后我嘗試閱讀打印這些結(jié)果的源代碼。在compile/internal/escape/leaks.go中,我找到了評(píng)論// 泄漏表示來(lái)自參數(shù)的一組賦值流// 到堆或它的任何函數(shù)(第一個(gè) numEscResults)// 結(jié)果參數(shù)。但我無(wú)法理解這一點(diǎn),是否有任何官方文件來(lái)表示它。此外,在源代碼中我發(fā)現(xiàn)了一個(gè)問(wèn)題。如果之后的結(jié)果參數(shù)numEscResults(7)會(huì)在運(yùn)行時(shí)逃逸到堆中?
查看完整描述

1 回答

?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

參數(shù) i1 泄漏到 ~r1 with derefs=0 和泄漏參數(shù)的含義是什么:i1 結(jié)果 ~r1 level=0

TLDL:如果您正在尋找分配,請(qǐng)忽略泄漏的參數(shù)并尋找“移動(dòng)到堆”的部分。

“泄漏參數(shù)”意味著該函數(shù)在返回后以某種方式使其參數(shù)保持活動(dòng)狀態(tài),這并不意味著它被移動(dòng)到堆中,實(shí)際上大多數(shù)“泄漏參數(shù)”都分配在堆棧上。

“r1”指的是函數(shù)的返回值,它從0開(kāi)始,所以“r1”指的是第二個(gè)返回值。(與 OP 提供的示例代碼不匹配,應(yīng)該是 r0),在第一個(gè)片段的情況下,它泄漏了“i1”,因?yàn)椤皉0 = i1”,所以第 0 個(gè)函數(shù)返回值是“i1”,因此是“i1” " 返回后必須保持活動(dòng)狀態(tài),“泄漏”給調(diào)用者

編譯器輸出中“泄漏參數(shù)”之前的部分是因?yàn)?OP 使用“-m -m”,它打印數(shù)據(jù)流圖。

對(duì)于 deref,來(lái)自 cmd/compile/internal/escape/escape.go 中的注釋?zhuān)?/p>

[...] 取消引用操作的數(shù)量減去尋址操作的數(shù)量被記錄為邊緣的權(quán)重(稱(chēng)為“derefs”)。

“級(jí)別”在當(dāng)前評(píng)論中沒(méi)有描述,自從我熟悉 gc 源代碼以來(lái)已經(jīng)有一段時(shí)間了,據(jù)我所知,它是內(nèi)存間接級(jí)別,間接 (*) 操作增量,地址 (&)遞減,因此這個(gè)函數(shù)

func A1(a **int) *int {

    p := &a

    return **p

}

應(yīng)該給出一個(gè) level=1 的泄漏參數(shù)a。

此外,在源代碼中我發(fā)現(xiàn)了一個(gè)問(wèn)題。如果 numEscResults(7) 之后的結(jié)果參數(shù)會(huì)在運(yùn)行時(shí)逃逸到堆中?

是的,第 7 個(gè)之后取決于泄漏參數(shù)的所有結(jié)果(讀取、返回)都將移至堆,我不知道 7 的確切原因,但我可以從 gc 源代碼的經(jīng)驗(yàn)中猜測(cè)它是一個(gè)值不會(huì)減慢太多編譯速度,但會(huì)保留對(duì)大多數(shù)函數(shù)的優(yōu)化


查看完整回答
反對(duì) 回復(fù) 2022-11-23
  • 1 回答
  • 0 關(guān)注
  • 372 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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