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

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

是否可以在 go 中手動釋放內存?

是否可以在 go 中手動釋放內存?

Go
慕婉清6462132 2022-01-17 18:19:02
在與大學討論之后,我想知道是否有可能(即使完全沒有任何意義)在 go 中手動釋放內存(即通過使用 unsafe 包)。是嗎?
查看完整描述

2 回答

?
達令說

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

這是一個您可能感興趣的線程:為 GOGC=off 添加 runtime.Free()

有趣的部分:

Go GC 不再具有手動釋放塊的能力。此外,運行時。Free 是不安全的(人們可能會釋放仍在使用中的指針或雙重釋放),然后 Go 努力擺脫的各種 C 內存問題將再次出現。另一個原因是運行時有時會在你背后分配,程序無法顯式釋放內存。

如果你真的想用 Go 手動管理內存,請根據 syscall.Mmap 或 cgo malloc/free 實現自己的內存分配器。

對于像 Go 這樣的并發語言來說,長時間禁用 GC 通常是一個糟糕的解決方案。Go 的 GC 只會在未來變得更好。

TL;DR:是的,但不要這樣做


查看完整回答
反對 回復 2022-01-17
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

我有點晚了,但是這個問題在谷歌上排名很高,所以這里是 DGraph 數據庫的創建者的一篇文章,它解釋了 malloc/calloc 的替代方法,即 jemalloc,值得一看

https://dgraph.io/blog/post/manual-memory-management-golang-jemalloc/

使用這些技術,我們可以兩全其美:我們可以在關鍵的、內存綁定的代碼路徑中進行手動內存分配。同時,我們可以在非關鍵代碼路徑中獲得自動垃圾回收的好處。即使您不習慣使用 Cgo 或 jemalloc,您也可以將這些技術應用于更大的 Go 內存塊,并產生類似的影響。

而且我還沒有測試過,但是有一個叫jemalloc-go的github庫

https://github.com/spinlock/jemalloc-go


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 1215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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