golang 變量逃逸分析

package main

import "fmt"

//本函數測試入口參數和返回值情況
func dummy(b int) int {
   var c int
   c = b
   return c
}

//空函數什麼都不做
func void() {

}

// 聲明空結構體測試結構體逃逸情況
type Data struct {
}

func dummy1() *Data {
   var c Data
   return &c
}
func main() {
   //變量逃逸(Escape Analysis)——自動決定變量分配方式,提高運行效率
   //堆和棧各有優缺點,該怎麼在編程中處理這個問題呢?在 C/C++ 語言中,
   // 需要開發者自己學習如何進行內存分配,選用怎樣的內存分配方式來適應不同的算法需求。
   // 比如,函數局部變量儘量使用棧,全局變量、結構體成員使用堆分配等。
   // 程序員不得不花費很長的時間在不同的項目中學習、記憶這些概念並加以實踐和使用。
   //
   //Go語言將這個過程整合到了編譯器中,命名爲“變量逃逸分析”。通過編譯器分析代碼的特徵和代碼的生命週期,決定應該使用堆還是棧來進行內存分配。
   //聲明變量 並打印
   var a int
   void()
   fmt.Println(a, dummy(0))

   fmt.Println(dummy1())
}

 

發佈了233 篇原創文章 · 獲贊 63 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章