大家好,在这个周末我参加了Golang-Conference-2020,每个议程养分都很高,而在最後一个议程Deep Dive into The Escape Analysis in Go刷新我的三观。
先说结论:
在 Golang 中,传递指标因为要做
Escape Analysis
导致效能消耗,所以比传递值还要慢
在 C/C++的世界中,我们需要自行控管记忆体,放在 stack 或 heap 我们须控管他们的释放,但由於 Golang 有 GC(Garbage Collection),所以 Golang 本身会帮我们控管记忆体的释放,
而这个变数到底要放在 stack 或 heap 就要透过Escape Analysis
来分析,如果变数以指标的方式传递给函数,Escape Analysis
在分析的时间往往多过传递值的时间,所以在 Golang 中传递指标反而是没有效能优点的。
也不然,在when-to-use-pointers-in-go提到,如果复制的是非常大的变数
,那传递指标是有机会比传递值还快的,毕竟传递值就是复制一个值到函数中,但这个非常大的变数
到底多大并没有正确答案,大家还是要用 benchmark 来测试才会知道。
在 Golang 中,我曾经为了效能一直使用指标,而指标导致没办法像 FP 一样有稳定的 output 一直让我头疼,但後来发现原来根本没有提升效能真的是让我大大上了一刻,真的是没搞清楚做了一堆白工呢 XD。
<<: 鼠年全马铁人挑战 WEEK 39:封包测试工具 - Charles (四)
>>: JavaScript ⑅ES6:展开运算子 & 其余运算子
质询握手身份验证协议(Challenge-Handshake Authentication Prot...
昨天了解如何使用databinding的单向绑定,把data放到view里,那反过来当view发生变...
这是我一边学习一边写下的笔记,如果内容有错,恳请在下方留言跟我说,我会非常感谢的!!! 以下我们用主...
今天的实作内容主要根据教学网站进行。 接下来两天的主要内容是将Django部属到正式环境,让使用者可...
前言 所以说LIFF Bluetooth能用在哪里? 最近我买了一台智能电风扇,当觉得热,又觉得伫立...