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, 刘桂祥 <liuguixiang...@gmail.com> 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+unsubscr...@googlegroups.com.
> 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.

Reply via email to