晚上在閱讀go lang的資料時突然想到一個問題,go是如何分配變數的記憶體結構的呢?好在網上的一篇文章做了透徹的分析見【go語言局部變數分配在棧還是堆】。 其結論是go語言局部變數的分配是由編譯器決定的。go語言編譯器會自動決定把一個變數放在棧還是放在堆,編譯器會做逃逸分析(escape analy ...
晚上在閱讀go lang的資料時突然想到一個問題,go是如何分配變數的記憶體結構的呢?好在網上的一篇文章做了透徹的分析見【go語言局部變數分配在棧還是堆】。
其結論是go語言局部變數的分配是由編譯器決定的。go語言編譯器會自動決定把一個變數放在棧還是放在堆,編譯器會做逃逸分析(escape analysis),當發現變數的作用域沒有跑出函數範圍,就可以在棧上,反之則必須分配在堆。go語言聲稱這樣可以釋放程式員關於記憶體的使用限制,更多的讓程式員關註於程式功能邏輯本身。