获得徽章 0
#青训营 x 字节后端训练营# 学习打卡 day_15
在 Golang 语言中,变量不能显示地指定分配到栈空间还是堆空间,比如:new,make等关键字,不能确定分配在栈空间还是堆空间,那我们怎么知道变量是分配到栈上还是堆上呢?从官方的回复可知:官方让开发者无需关心变量是分配在栈上还是堆上,但是为了写出高质量代码和定位问题,还是有必要了解 Golang 底层内存管理的逻辑。
只要局部变量不能证明在函数结束后不能被引用,那么就分配到堆上。换句话说,如果局部变量被其他函数所捕获,那么就被分配到堆上。
由上可知,根据栈空间的特性可以知道,函数栈帧的大小是有限的且在编译时就已经确定,如果在编译时无法确定变量大小或者变量过大,在 runtime 运行时分配到堆上。
在 Golang 语言中,变量不能显示地指定分配到栈空间还是堆空间,比如:new,make等关键字,不能确定分配在栈空间还是堆空间,那我们怎么知道变量是分配到栈上还是堆上呢?从官方的回复可知:官方让开发者无需关心变量是分配在栈上还是堆上,但是为了写出高质量代码和定位问题,还是有必要了解 Golang 底层内存管理的逻辑。
只要局部变量不能证明在函数结束后不能被引用,那么就分配到堆上。换句话说,如果局部变量被其他函数所捕获,那么就被分配到堆上。
由上可知,根据栈空间的特性可以知道,函数栈帧的大小是有限的且在编译时就已经确定,如果在编译时无法确定变量大小或者变量过大,在 runtime 运行时分配到堆上。
展开
评论
点赞
![[吃瓜群众]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_10.42a731c.png)
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)
![[可怜]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_5.ece2a96.png)
![[害羞]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_7.eca1535.png)
![[闭嘴]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_8.c6ea514.png)
![[睡]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_9.8cf4c38.png)
![[尴尬]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_11.8824107.png)
![[发怒]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_12.0f24f23.png)
![[调皮]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_13.aaa8265.png)
![[微笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_1.7d9f699.png)