亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Go 通道上的范圍循環和循環變量的垃圾回收

Go 通道上的范圍循環和循環變量的垃圾回收

Go
慕碼人8056858 2022-08-09 20:29:50
請考慮以下 Go 代碼:type LargeStructWithNestings struct {...}func generatorChnl() <-chan *LargeStructWithNestings { ... }// code snippetchnl := generatorChnl()for entry := range chnl {    // line A    doStuffWith(entry)    entry = nil              // line B}假設通道不經常生成值,并且這些是指向大型結構的指針,那么上述是否會導致對 by 所指向的內存的垃圾回收發生得比原本更早發生?或者,一旦循環旋轉回 ,一旦下一個迭代塊位于 ?line Bentryline Aentryline A目標是找到一種方法,如果可能的話,保持常駐集大小修剪。
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

該語句不會在迭代之間清除循環變量。有一個單循環變量,在每次迭代中都會重復使用。因此,在從通道接收到新值之前,它將保留上次分配給它的值。for

所以,是的,如果從塊接收“很長時間”,循環變量將保留對最后一個接收(和分配)項目的“引用”,從而防止它被垃圾回收。chnlentry

在實踐中,這很少是一個問題,如果有的話。來自通道的值可以“頻繁”接收,接收的值可能是“小”的,也可能有其他參考,以及這些的任意組合。

如果在您的特定情況下,這確實是一個問題,您可以清除該變量,但我從未遇到過任何需要它的示例。


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號