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