这个变量到底分配到哪里了?
编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法,简单来说就是分析在程序的哪些地方可以访问到该指针。 通俗地讲,逃逸分析就是确定一个变量要放堆上还是栈上,规则如下: 是否有在其他地方(非局部)被引用。只要有可能被引用了,那么它一定分配到堆上。否则分配到栈上。 即使没有被外部引用,但对象过大,无法存放在栈区上。依然有可能分配到堆上。 对此你可以理解为,逃逸分析是编译器用于决定变量分配到堆上还是栈上的一种行为。 在什么阶段确立逃逸 在编译阶段确立逃逸,注意并不是在运行时。 为什么需要逃逸 这个问题我们可以反过来想,如果变量都分配到堆上了会出现什么事情?例如:
简单来说,就是频繁申请并分配堆内存是有一定 “代价” 的。会影响应用程序运行的效率,间接影响到整体系统。 因此 “按需分配” 最大限度的灵活利用资源,才是正确的治理之道。这就是为什么需要逃逸分析的原因,你觉得呢? 怎么确定是否逃逸 第一,通过编译器命令,就可以看到详细的逃逸分析过程。而指令集 -gcflags 用于将标识参数传递给 Go 编译器,涉及如下:
(编辑:烟台站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |