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

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

為什么 GC 不收集此內存塊

為什么 GC 不收集此內存塊

Go
拉風的咖菲貓 2022-08-24 18:41:14
我寫了一個程序,試圖學習Go的GC。我認為最初執行mx變量的區域不應該被回收,但我發現這個區域仍然可以通過指針訪問。我的代碼有問題嗎?func main()  {    fnc()}type myStruct struct {    P int64    P2 int64}//go:noinlinefunc fnc()  {    mx := &myStruct{100,2} // mx -> 0xc00001c080    my := &myStruct{3,4}  // my -> 0xc00001c090    oldmx := uintptr(unsafe.Pointer(mx))    mx = my    runtime.GC()    debug.FreeOSMemory()    oldmxStc := (*myStruct)(unsafe.Pointer(oldmx))    fmt.Println(oldmxStc)}
查看完整描述

1 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

為什么GC沒有收集這個塊?

垃圾回收器不會對收集哪些特定的內存塊以及何時收集做出任何承諾。GC的目標實際上非常廣泛,即收集垃圾(無法訪問的內存)。它不一定能使程序的內存占用盡可能小。正如icza所提到的,這樣做的效率非常低下。

如果你想了解一些關于Go垃圾收集器如何工作的詳細信息,我建議你看一些演講或閱讀那些研究過它的人的文章。

這是來自官方Go博客的一個很好的閱讀:https://blog.golang.org/ismmkeynote

垃圾回收器的行為不是由語言本身定義的,在運行時的文檔中只有一些非常模糊的含義。

缺乏此類功能的官方文檔是故意的。維護者想要這個理想的情況:

  • 開發人員:不要擔心GC,只需編寫程序即可

  • 維護者:不斷改進GC以使其盡可能好,以便開發人員不必考慮它。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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