iT邦幫忙

3

Week37 -我當時害怕極了,原來Golang用指標是母湯的 [Server的終局之戰系列]

  • 分享至 

  • xImage
  •  

大家好,在這個週末我參加了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。

參考


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言