Golang内存逃逸

package main

import (
  "fmt"
)

func escape1() func() {
  var n int // 闭包引用对象
  return func() {
    n++
    println(n)
  }
}

func escape2(n int) {
  a := make([]int, 10)
  b := make([]int, 9999) // 分配内存过大
  c := make([]int, n)    // 分配大小不确定
  for i := range a {
    b[i] = i
  }
  for i := range b {
    b[i] = i
  }
  for i := range c {
    c[i] = i
  }
}

type A struct {
  N int
}

func escape3() *A {
  a := &A{} // 指针逃逸
  b := &A{}
  b.N = 10
  return a
}

func escape4(n interface{}) {
  fmt.Println(n) // 动态类型逃逸
}

// go build -gcflags=-m
func main() {
  escape1()()
  escape4(10)
}

你可能感兴趣的:(Golang内存逃逸)