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

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

golang中的內存泄漏

golang中的內存泄漏

Go
函數式編程 2022-01-04 11:00:08
這是代碼。在 golang main 函數中,在 main.go 中func main() {    rgc.GetRgcService()}其中rgc位于另一個名為mrgc.go. 里面的代碼是package rgcfunc GetRgcService() (svc *RgcService, err error) {}函數 GetRgcService 是一個空函數。但是,當我用來valgrind測試內存時,我得到了以下輸出 ==58156== HEAP SUMMARY: ==58156==     in use at exit: 1,152 bytes in 4 blocks ==58156==   total heap usage: 9 allocs, 5 frees, 1,304 bytes allocated ==58156== 288 bytes in 1 blocks are possibly lost in loss record 4 of 4 ==58156==    at 0x4A27F63: calloc (vg_replace_malloc.c:593) ==58156==    by 0x4010DE1: allocate_dtv (in /home/opt/gcc-4.8.2.bpkg-r2/gcc-4.8.2.bpkg-r2/lib64/ld-2.18.so)==58156==    by 0x40114ED: _dl_allocate_tls (in /home/opt/gcc-4.8.2.bpkg-r2/gcc-4.8.2.bpkg-r2/lib64/ld-2.18.so)==58156==    by 0x4B36DE2: pthread_create@@GLIBC_2.2.5 (in /home/opt/gcc-4.8.2.bpkg-r2/gcc-4.8.2.bpkg-r2/lib64/libpthread-2.18.so)==58156==    by 0x4B2937: _cgo_sys_thread_start (gcc_linux_amd64.c:75)==58156==    by 0x45506C: runtime.asmcgocall (/home/map/.jumbo/lib/go/src/runtime/asm_amd64.s:612)==58156==    by 0x50619F: ??? (in /home/users/zhanghuaizhi/ttt.38)==58156==    by 0xC7FFFFFFFF: ???==58156==    by 0xC820067FFF: ???==58156==    by 0x42D69B: runtime.allocm (/home/map/.jumbo/lib/go/src/runtime/proc.go:1260)==58156==    by 0x42DD3A: runtime.newm (/home/map/.jumbo/lib/go/src/runtime/proc.go:1510)==58156==    by 0x42E071: runtime.startm (/home/map/.jumbo/lib/go/src/runtime/proc.go:1583)==58156== ==58156== LEAK SUMMARY:==58156==    definitely lost: 0 bytes in 0 blocks==58156==    indirectly lost: 0 bytes in 0 blocks==58156==      possibly lost: 1,152 bytes in 4 blocks==58156==    still reachable: 0 bytes in 0 blocks==58156==         suppressed: 0 bytes in 0 blocks我怎樣才能釋放這些內存?因為我需要用這個函數來做很多過程。它會導致大量內存泄漏,無法釋放
查看完整描述

2 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

什么都沒有泄露。內存仍然可以訪問,并且在退出時不釋放東西是很常見的,它只會花費不必要的時間,操作系統無論如何都會處理它。

這是分配給線程本地存儲到仍在運行的線程的內存,因此釋放它是不正確的。一個更好的問題是“我如何停止這個線程?”,答案是:你不知道,Go 運行時會處理它。在退出時不停止線程是很常見的,它只會花費不必要的時間,操作系統無論如何都會處理它。

它與您的代碼和函數調用無關,它是 Go 運行時為自己分配的。

Go 是一種垃圾收集語言,在它上面使用 valgrind 不會告訴你太多。它既不會檢測真正的內存泄漏,也不會了解哪些內存仍在使用中。


查看完整回答
反對 回復 2022-01-04
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

您可以手動運行垃圾收集:https : //golang.org/pkg/runtime/#GC

我認為這會釋放內存,但正如其他人所說,當運行時的計劃垃圾收集器運行時,內存最終會被釋放。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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