一个逃逸分析问题,求指教

coderyw · · 2766 次点击
这个我知道,问题是,就我了解的,没有逃逸的数据分配在函数栈上,然后等函数结束时候,就被一起释放。但是我这个函数,是一直运行,一直接收数据,问题就是数据会一直分配在栈上,不会导致栈空间不足吗?还是我对栈这里的理解有问题。。
#2
更多评论
jan-bar
想要拥有,必定付出。
看到一篇文章:[Golang 元素值在经过通道传递时会被复制,这个复制是浅复制](https://blog.csdn.net/wohu1104/article/details/109608608) 如果通道传递值类型,实际就是完整的复制,发送端和接收端的数据不是同一个,所以不存在逃逸。 如果传递引用类型,由于只是引用被复制,例如指针地址被传过去了,这时候就存在逃逸。
#1
jan-bar
想要拥有,必定付出。
我运行了如下代码,浏览器打开 http://127.0.0.1:4500/debug/pprof/ ,然后点击`allocs`,一直刷新页面看到`Stack =`栈分配没有增加,所以我觉得不会随着程序的运行导致栈空间占满。点击`heap`里面的`Stack =`也是没有增加的。 ```go package main import ( "fmt" "net/http" _ "net/http/pprof" "time" ) func main() { pc := make(chan t) go rcv(pc) go func() { for { tt := t{} pc <- tt time.Sleep(time.Second) } }() _ = http.ListenAndServe(":4500", nil) } type t struct { A int } func rcv(pc chan t) { for { p := <-pc p.A = 1 fmt.Printf("p: %p\n", &p) } } ```
#3