Hello,

I often punch above my weight trying to understand various problem, so when 
I saw talk "Understanding Allocations: the Stack and the Heap - GopherCon 
SG 2019" by Jacob Walker (https://www.youtube.com/watch?v=ZMZpH4yT7M0), I 
cannot resist it. I'm basically compiler front-end user and nothing more, 
but this talk is very clear, so I learn something.

I'm using "go version go1.17 linux/amd64" and I puzzled by what I get when 
i run "go build -gcflags="-m -l" go_program.go", which should print 
optimization decisions with disable inlining (I hope that I get it 
correctly). When Jacob Walker use "println" I follow what he said at the 
beginning and use "fmt.Println".

For the program presented at 13:20 I get

x does not escape
 ... argument does not escape
n escapes to heap

while at presentation you have "&n does not escape". It seems to me, that 
on my computer much more things "escapes to heap". Can anyone point me in 
the right direction, to understand why I get "n escapes to heap"? Two 
simple answer that I can think about is "You don't use println" or 
"Compiler has changed.", but I want to know more about that. (I probably 
again punch above my weight.)

I also reworked first code shown at 16:47 to form

package main

import "fmt"

func main() {
    b := read()
    fmt.Println("b:", b)
}

func read() []byte {
    b := make([]byte, 32)
    return b
}

and get
make([]byte, 32) escapes to heap
... argument does not escape
"b:" escapes to heap
b escapes to heap
I guess fmt.Println can force "b:" to be of type interface{}, but this is 
still puzzling, why such simple thing "escapes to heap", since in the talk 
he says that "interfaces may escapes to the heap".

By the way, if someone can explain me what is going on with "println", I 
would be gratefully. This isn't important to me, since "fmt" give me what I 
need, but I just curious what Walker used it.

Best
Kamil

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/ed5fe55f-09c3-41c5-83fd-12a04c27dbd3n%40googlegroups.com.

Reply via email to