-gcflags="-m -m" will make the compiler print out its escape analysis
choices. This might be easier than instrumenting your code, which might
affect the escape analysis decisions.
On Monday, 3 October 2016 13:48:47 UTC+11, 刘桂祥 wrote:
>
> Yes you are right . thanks a lot and I try more debug info and have
> looked that:
>
>
> func main() {
> println("debug")
> a := interface{}(100)
> println(&a, a)
> b := fmt.Sprint(a)
> println("debug1", b, &b, Pointer(*((*uintptr)(Pointer(&b)))), *((*int
> )(Pointer(uintptr(Pointer(&b)) + 8))))
> }
>
> and add debug info to runtime/mallocgc.go file
> here is the output:
>
> debug
> mallocgc: 8
> mallocgc return2: 0xc20800a220
> 0xc208039f68 (0xa00a0,0xc20800a220)
> mallocgc: 3
> mallocgc return2: 0xc20800a230
> debug1 100 0xc208039f48 0xc20800a230 3
>
> 在 2016年10月3日星期一 UTC+8上午9:47:18,Dave Cheney写道:
>>
>> On Monday, 3 October 2016 12:39:34 UTC+11, 刘桂祥 wrote:
>> > package main
>> >
>> >
>> > import (
>> > "fmt"
>> > )
>> > func main() {
>> > a := interface{}(100)
>> > println(&a, a)
>> > fmt.Sprint(a)
>> > }
>> >
>> >
>> > go run x.go the output:
>> >
>> >
>> > 0xc42003bf18 (0x89040,0xc42000a2c0)
>> >
>> >
>> >
>> > I just want to ask 0xc42000a2c0 as the a (interface{}) 's data pointer
>> is point to where ? heap ?
>>
>> It is on the heap, the value escapes when passed to fmt,Sprint
>>
>> >
>> > also I test this:
>> >
>> >
>> > func BenchmarkFmtEscap3(b *testing.B) {
>> > b.ReportAllocs()
>> >
>> >
>> > for i := 0; i < b.N; i++ {
>> > a := interface{}(100)
>> > fmt.Sprint(a)
>> > }
>> > }
>> >
>> >
>> > BenchmarkFmtEscap3-4 10000000 141
>> ns/op 16 B/op 2 allocs/op
>> >
>> >
>> >
>> > why is 2 allocs and 16bytes ??
>>
>> One for a, which escapes to the heap when passed to fmt.Sprint, and one
>> for the value returned from fmt,Sprint
>>
>>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.