Golang中的内存泄漏

怀亚特(Wyatt):

这是代码。在golang main函数中,该函数位于main.go中

func main() {
    rgc.GetRgcService()
}

其中,rgc在另一golang文件,命名mrgc.go里面的代码是

package rgc
func 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

如何释放这些内存?由于我需要使用此功能来完成很多过程。这会导致大量的内存泄漏,无法释放

艺术 :

什么都没有泄漏。内存仍然可以访问,退出时不释放任何东西是很常见的,这只花了不必要的时间,操作系统仍然会处理它。

这是分配给线程本地存储到仍在运行的线程的内存,因此释放它是不正确的。一个更好的问题是“我如何停止该线程?”,对此的答案是:您没有,Go运行时会处理它。在退出时不停止线程是很常见的,这只花了不必要的时间,操作系统仍然会处理它。

它与您的代码和函数调用无关,这是Go运行时为其自身分配的东西。

Go是一种垃圾收集语言,在上面使用valgrind不会告诉您太多信息。它既不会检测到实际的内存泄漏,也不会了解仍在使用哪个内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章