堆内存(Heap):一般来讲是人为手动进行管理,手动申请、分配、释放。一般硬件内存有多大堆内存就有多大。适合不可预知大小的内存分配,分配速度较慢,而且会形成内存碎片。
栈内存(Stack):是一种拥有特殊规则的线性表数据结构。由编译器进行管理,自动申请、分配、释放。大小一般是固定的。
作者:我是一只鱼吖
链接:https://juejin.cn/post/7140864963974791175
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在 Go 语言(Golang)中,编译器会尝试在栈上分配局部变量,因为栈上分配的速度更快,并且能够在函数返回时自动回收。但是,如果编译器发现某个变量的生命周期超出了其函数的范围,它就会将该变量分配到堆上,这个过程称为“逃逸分析”。
逃逸分析 是编译器在编译期间进行的一种分析,用来确定变量的生命周期是否超出了函数的作用域。