In go when closure call the out varible will pass pointer to the closure func so I doubt in example2.go y is passed &y to closure
I don't know the compile how to analysis this and decide that can be allocated in stack correctly ? 在 2016年10月4日星期二 UTC+8下午11:54:02,Chris Manghane写道: > > In example1, the // BAD: y escapes is there because y should not escape > from that function, but the current algorithm needs to be improved for this > case. In that closure, the address of y is captured as the closure argument > p and since p is only dereferenced, the analysis should not consider it to > escape. > > In example3, the analysis above applies and y should not escape. y is > closed over and dereferenced, but we correctly do not mark it as escaping. > > In example2, y contains no pointers; it can never escape. The test was to > see if capturing/closing over a non-pointer value would cause it to escape. > > It's a bit confusing, but to restate, in example1, y should not escape > even though it currently does. > > On Mon, Oct 3, 2016 at 11:09 PM, 刘桂祥 <liuguix...@gmail.com <javascript:>> > wrote: > >> // example1.go >> >> package main >> >> >> func main() { >> var y int // BAD: y escapes >> func(p *int, x int) { >> *p = x >> }(&y, 42) >> } >> >> example1.go y escape to the heap >> >> // example2.go >> >> package main >> >> func main() { >> var y int >> func(x int) { >> y = x >> }(42) >> } >> >> example2.go y is not escaped and why ?? >> >> // example3.go >> >> package main >> >> func main() { >> a := 100 >> y := &a >> func(x int) { >> *y = x >> }(42) >> } >> >> example3.go y is not escaped and why ?? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.