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内存逃逸
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 为什么要尽量避免内存逃逸? 因为如果变量的内存发生逃逸,它的生命周期就是不可知的,其会被分配到堆上,而堆上分配内存...
- 内存逃逸 在一段程序中,每一个函数都会有自己的内存区域存放自己的局部变量、返回地址等,这些内存会由编译器在栈中进行...