美文网首页
golang内存逃逸

golang内存逃逸

作者: 博楠同学 | 来源:发表于2023-12-10 11:38 被阅读0次

    分析内存逃逸的命令可以使用下面2种的任意一种

    go tool compile -m -l main.go     // 显示内存逃逸情况
    go build -gcflags "-m -l" main.go // 显示的更多的信息
    

    1、函数返回后,函数中的对象依然可能存活
    2、对象过大,超过栈空间的大小限制,例如一个变量超过了64k
    3、不确定的切片大小的可能会出现,例如

    var length int
    _ = make([]int, length)  //这里会发生逃逸到堆上
    

    4、接口类型可能会逃逸
    (1) 函数返回接口类型,并且发生了类型转换
    func fn () interface { a := "aaaa" return a }
    (2)容器类型(slice map) 元素为接口类型,并对接口类型进行赋值,会导
    致容器的元素发生逃逸
    func fn() { s := []interfacr{}{1,2} // 未发生逃逸 s[0] = 0 //发生逃逸 }
    (3) 切片元素是指针类型时,对切片元素惊醒赋值会导致元素发生逃逸

    如果时大对象可以使用指针类型来传参,这样可以节省空间,
    小对象应尽量避免使用指针类型,因为这个时候会分配到栈,减少逃逸的风险性能更好

    相关文章

      网友评论

          本文标题:golang内存逃逸

          本文链接:https://www.haomeiwen.com/subject/eraugdtx.html