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())
}