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

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

這種類型的 golang 字符串切片會(huì)在底層字節(jié)數(shù)組中泄漏內(nèi)存嗎?

這種類型的 golang 字符串切片會(huì)在底層字節(jié)數(shù)組中泄漏內(nèi)存嗎?

Go
精慕HU 2021-12-06 14:56:11
golang 字符串切片是否buf = buf[n:]會(huì)導(dǎo)致底層字節(jié)數(shù)組中的內(nèi)存泄漏?如果是這樣,是否可以獲取有關(guān)底層字節(jié)數(shù)組的任何信息(如容量或基本內(nèi)存地址)以驗(yàn)證泄漏?請(qǐng)參閱下面的示例代碼:var buf stringfunc push(s string) {    buf += s    if len(buf) > 3 {        buf = buf[len(buf)-3:] // can this line leak memory in underlying byte array?    }    fmt.Printf("buf=[%v]\n", buf)}
查看完整描述

2 回答

?
天涯盡頭無(wú)女友

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

不,這個(gè)例子不會(huì)導(dǎo)致內(nèi)存泄漏,因?yàn)槊看握{(diào)用push. 有時(shí)可能會(huì)保留一些字節(jié)以減少分配,但它的工作原理是一個(gè)不應(yīng)考慮的實(shí)現(xiàn)細(xì)節(jié)。


如果您正在考慮在分配切片操作的結(jié)果但從不追加時(shí)可能出現(xiàn)的類似情況。只要您了解切片的語(yǔ)義,就不會(huì)出現(xiàn)任何泄漏。


s := make([]byte, 1024)

s = s[1000:]

fmt.Println(s, len(s), cap(s))

此示例將保留前 1000 個(gè)字節(jié)已分配,但無(wú)法訪問。答案很簡(jiǎn)單,不要那樣做。不難避免,如果確實(shí)需要確保已釋放底層數(shù)組,請(qǐng)使用copy將字節(jié)移動(dòng)到新切片。


這與字符串相同:


s = s[1020:]

// may leave the first 1000 bytes allocated

這再次很容易看到發(fā)生了什么,并避免。如果您使用大字符串,通常最好使用[]byte任何方式,這樣您可以更好地控制分配,并且可以在需要時(shí)復(fù)制字節(jié)。


查看完整回答
反對(duì) 回復(fù) 2021-12-06
?
臨摹微笑

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

將切片表達(dá)式應(yīng)用于字符串中的結(jié)果p := s[i:j]是一個(gè)字符串。據(jù)我所知,Go 語(yǔ)言規(guī)范(https://golang.org/ref/spec)沒有指定p將由與s.

然而,在 Go 1.6 和更早版本中,一個(gè)實(shí)時(shí)引用ps不會(huì)被垃圾收集。然而,這可能會(huì)在 Go 的未來(lái)版本中改變。

一個(gè)有趣的事實(shí)是,Java 中的String.substring方法在 Java 8 之前以相同的方式實(shí)現(xiàn)。然而,在 Java 8 中substring返回一個(gè)副本。

回到你的例子。每次調(diào)用push函數(shù)時(shí),以下行實(shí)際上都會(huì)創(chuàng)建一個(gè)新的字符串實(shí)例:

buf += s

buf 的舊實(shí)例被垃圾收集。所以你的例子不受上述問題的影響。


查看完整回答
反對(duì) 回復(fù) 2021-12-06
  • 2 回答
  • 0 關(guān)注
  • 374 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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