首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
爱唱歌的太平湖水怪
广东科学技术职业学院 后端
发布于广东
关注
已关注
取消关注
@小白debug:
高频golang面试题:简单聊聊内存逃逸?
问题 知道golang的内存逃逸吗?什么情况下会发生内存逃逸? 怎么答 golang程序变量会携带有一组校验数据,用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验,它就可以在栈上分配。否则就说它 逃逸 了,必须在堆上分配。 能引起变量逃逸到堆上的典型情况: 在方法内把局部变量指针返回 局部变量原本应该在栈中分配,在栈中回收。但是由于返回时被外部引用,因此其生命周期大于栈,则溢出。 发送指针或带有指针的值到 channel 中。 在编译时,是没有办法知道哪个 goroutine 会在 channel 上接收数据。所以编译器没法知道变量什么时候才会被释放。 在一个切片上存储指针或带指针的值。 一个典型的例子就是 []*string 。这会导致切片的内容逃逸。尽管其后面的数组可能是在栈上分配的,但其引用的值一定是在堆上。 slice 的背后数组被重新分配了,因为 append 时可能会超出其容量( cap )。 slice 初始化的地方在编译时是可以知道的,它最开始会在栈上分配。如果切片背后的存储要基于运行时的数据进行扩充,就会在堆上分配。 在 interface 类型上调用方法。 在 interface 类型上调用方法都是动态调度的 —— 方法的真正实现只能在运行时知道。想像一个 io.Reader 类型的变量 r , 调用 r.Read(b) 会使得 r 的值和切片b 的背后存储都逃逸掉,所以会在堆上分配。 举例 通过一个例子加深理解,接下来尝试下怎么通过 go build -gcflags=-m 查看逃逸的情况。package mainimport "fmt"type A struct { s string}// 这是上面提到的 "在方法内把局部变量指针返回" 的情况func foo(s string) *A { a := new(A) a.s = s return a //返回局部变量a,在C语言中妥妥野指针,但在go则ok,但a会逃逸到堆}func main() { a := foo("hello") b := a.s + " world" c := b + "!" fmt.Println(c)} 执行go build -gcflags=-m main.go go build -gcflags=-m main.go# command-line-arguments./main.go:7:6: can inline foo./main.go:13:10: inlining call to foo./main.go:16:13: inlining call to fmt.Println/var/folders/45/qx9lfw2s2zzgvhzg3mtzkwzc0000gn/T/go-build409982591/b001/_gomod_.go:6:6: can inline init.0./main.go:7:10: leaking param: s./main.go:8:10: new(A) escapes to heap./main.go:16:13: io.Writer(os.Stdout) escapes to heap./main.go:16:13: c escapes to heap./main.go:15:9: b + "!" escapes to heap./main.go:13:10: main new(A) does not escape./main.go:14:11: main a.s + " world" does not escape./main.go:16:13: main []interface {} literal does not escape<autogenerated>:1: os.(*File).close .this does not escape ./main.go:8:10: new(A) escapes to heap 说明 new(A) 逃逸了,符合上述提到的常见情况中的第一种。 ./main.go:14:11: main a.s + " world" does not escape 说明 b 变量没有逃逸,因为它只在方法内存在,会在方法结束时被回收。 ./main.go:15:9: b + "!" escapes to heap 说明 c 变量逃逸,通过fmt.Println(a ...interface{})打印的变量,都会发生逃逸,感兴趣的朋友可以去查查为什么。 以上操作其实就叫逃逸分析。下篇文章,跟大家聊聊怎么用一个比较trick的方法使变量不逃逸。方便大家在面试官面前秀一波。 文章推荐: golang面试题:简单聊聊内存逃逸? golang面试题:字符串转成byte数组,会发生内存拷贝吗? golang面试题:翻转含有中文、数字、英文字母的字符串 golang面试题:拷贝大切片一定比小切片代价大吗? golang面试题:能说说uintptr和unsafe.Pointer的区别吗? 如果你想每天学习一个知识点?
点赞 0
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-11 16:40
南华大学 Java
小鹏挂挂挂
一面: 1.自我介绍 2.深挖项目经历 3.项目中遇到的最大的困难怎么解决的 4.个人优点与缺点 5.对小鹏汽车的了解 6.反问已经挂了,但是我感觉我答的还行呢,还是给挂了
查看5道真题和解析
点赞
评论
收藏
分享
今天 13:00
门头沟学院 Java
java实习landing内耗时刻
实习了一周,压力是从上到下,从里到外的大。背景:公司有一套完整的新人培养体系,要求一个软件系统的生命周期完全由自己完成,也就是一个新手练习demo。其中包括最开始的环境搭建,gits使用,代码规范,需求分析,功能设计,数据库设计,UI原型图绘画,前后端开发,测试,部署上线,以及贯穿整个过程的全部文档编写,流程图,类图,uml图等等。。。问题:但是整个过程就巨内耗,公司用的自己封装的脚手架,持久层用的spring data jpa 都是我不熟悉的东西,而且没有文档参考学习,只能自己慢慢的啃。期间还有不少的犯错和挨叼。不过导师也是要求我自己探索整个过程遇到的难题,在错误中成长。总结:当然整个过程自...
我的实习日记
点赞
评论
收藏
分享
06-20 18:53
莆田学院 Java
学院本真的不配实习吗
佬们帮忙拷打下简历,孩子两个月就只约到三个面试,到底是不是简历出问题了😭😭😭
瓦学姐:
学院本就不配就业
点赞
评论
收藏
分享
06-17 21:57
门头沟学院 Java
哥们👯♂️,我成玩具了?
白友:
噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞
评论
收藏
分享
今天 11:05
南昌大学 硬件开发
硬件工程师简历求拷打,听劝
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
美团今天的ai coding笔试允许用ai吗
4995
2
...
该不该给领导买东西啊...
3685
美团第二批笔试
热聊中
3
...
小红书java一面
2986
4
...
美团第二次笔试 算法题直接白卷投降
2904
5
...
大疆结构秋招一面
2890
6
...
小红书-引擎架构- java实习-一&二面凉经
2703
7
...
快手秋招-后端一面
2691
8
...
大家离职都怎么开口的啊?
2430
9
...
秋招准备投这些厂可以吗?
2410
10
...
影石嵌入式面经
2239
创作者周榜
更多
正在热议
更多
#
实习的内耗时刻
#
58922次浏览
631人参与
#
扒一扒那些奇葩实习经历
#
71263次浏览
934人参与
#
工作上你捅过哪些篓子?
#
21825次浏览
139人参与
#
发工资后,你做的第一件事是什么
#
72599次浏览
252人参与
#
你上一次给父母打电话是什么时候
#
13422次浏览
126人参与
#
在职场上,你最讨厌什么样的同事
#
28123次浏览
202人参与
#
给26届的秋招建议
#
38857次浏览
995人参与
#
我的秋招“寄”录
#
45217次浏览
581人参与
#
秋招投递记录
#
28290次浏览
313人参与
#
校招第一份工作你干了多久?
#
99165次浏览
436人参与
#
节后第一天上班,我的精神状态
#
13950次浏览
122人参与
#
我的AI电子员工
#
13401次浏览
105人参与
#
今年秋招哪家公司给的薪资最良心?
#
262959次浏览
1459人参与
#
你最近一次加班是什么时候?
#
80187次浏览
428人参与
#
如果校招重来我最想改变的是
#
279615次浏览
2905人参与
#
秋招,不懂就问
#
12109次浏览
132人参与
#
安克创新求职进展汇总
#
40178次浏览
447人参与
#
应届生初入职场,求建议
#
240553次浏览
2716人参与
#
网易求职进展汇总
#
113260次浏览
1070人参与
#
机械人面试中的常问题
#
113442次浏览
1848人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务