thanks a lot

在 2017年4月16日星期日 UTC+8上午12:22:13,peterGo写道:
>
>
> For this version of your program with
>
>     type S struct{ B byte }
>
> There is an allocation,
>
> // example.go
> package main
>
> import (
>     "runtime"
>     "unsafe"
> )
>
> type S struct{ B byte }
>
> func main() {
>     var stats runtime.MemStats
>
>     runtime.ReadMemStats(&stats)
>     println(stats.Mallocs)
>     var x S
>     runtime.ReadMemStats(&stats)
>     println(stats.Mallocs)
>     _ = *ref(x)
>     runtime.ReadMemStats(&stats)
>     println(stats.Mallocs)
>
>     println(unsafe.Sizeof(x))
> }
>
> func ref(z S) *S {
>     return &z
> }
>
> Output:
>
> $ go version
> go version devel +bc29313 Fri Apr 14 16:47:25 2017 +0000 linux/amd64
> $ go run -gcflags '-N -l -m' example.go
> # command-line-arguments
> ./example.go:27:9: &z escapes to heap
> ./example.go:26:16: moved to heap: z
> ./example.go:14:23: main &stats does not escape
> ./example.go:17:23: main &stats does not escape
> ./example.go:20:23: main &stats does not escape
> 83
> 83
> 84
> 1
> $
>
> Peter
>
> On Saturday, April 15, 2017 at 12:14:48 PM UTC-4, peterGo wrote:
>>
>> 刘桂祥,
>>
>> Size and alignment guarantees
>> https://golang.org/ref/spec#Size_and_alignment_guarantees
>>
>> A struct or array type has size zero if it contains no fields (or 
>> elements, respectively) that have a size greater than zero. Two distinct 
>> zero-size variables may have the same address in memory.
>>
>> You have
>>
>>     type S struct{}
>>
>> Why do you expect runtime.MemStats to show an allocation for zero bytes?
>>
>> Peter
>>
>> On Saturday, April 15, 2017 at 10:12:34 AM UTC-4, 刘桂祥 wrote:
>>>
>>>
>>> go build -gcflags '-N -l' example.go && ./example
>>> If I use this to compile example.go it shound disable function inline 
>>> and the compile code should call ref() in example.go and will call mallocgc 
>>> runtimestats.Mallocs can see it  but it is not.
>>>
>>> 在 2017年4月14日星期五 UTC+8下午10:01:25,Ian Lance Taylor写道:
>>>>
>>>> On Thu, Apr 13, 2017 at 10:45 PM, 刘桂祥 <liuguix...@gmail.com> wrote: 
>>>> > go1.7.1 
>>>> > 
>>>> > go run -gcflags '-N -l -m' example.go 
>>>>
>>>> It is the -m flag that is generating the output you see. 
>>>>
>>>> If there is some other bug, please let us know what it is. 
>>>>
>>>> Ian 
>>>>
>>>> > 在 2017年4月14日星期五 UTC+8下午1:18:26,Ian Lance Taylor写道: 
>>>> >> 
>>>> >> On Thu, Apr 13, 2017 at 8:33 PM, 刘桂祥 <liuguix...@gmail.com> wrote: 
>>>> >> > // example.go 
>>>> >> > package main 
>>>> >> > 
>>>> >> > 
>>>> >> > import "runtime" 
>>>> >> > 
>>>> >> > 
>>>> >> > type S struct{} 
>>>> >> > 
>>>> >> > 
>>>> >> > func main() { 
>>>> >> >  var stats runtime.MemStats 
>>>> >> > 
>>>> >> > 
>>>> >> >  runtime.ReadMemStats(&stats) 
>>>> >> >  println(stats.Mallocs) 
>>>> >> >  var x S 
>>>> >> >  runtime.ReadMemStats(&stats) 
>>>> >> >  println(stats.Mallocs) 
>>>> >> >  _ = *ref(x) 
>>>> >> >  runtime.ReadMemStats(&stats) 
>>>> >> >  println(stats.Mallocs) 
>>>> >> > } 
>>>> >> > 
>>>> >> > 
>>>> >> > func ref(z S) *S { 
>>>> >> >  return &z 
>>>> >> > } 
>>>> >> > 
>>>> >> > go build -gcflags '-N -l' example.go && ./example 
>>>> >> > or 
>>>> >> > go run -gcflags '-N -l' example.go 
>>>> >> > 
>>>> >> > results: 
>>>> >> > ./example.go:21: &z escapes to heap 
>>>> >> > ./example.go:20: moved to heap: z 
>>>> >> > ./example.go:10: main &stats does not escape 
>>>> >> > ./example.go:13: main &stats does not escape 
>>>> >> > ./example.go:16: main &stats does not escape 
>>>> >> > 61 
>>>> >> > 61 
>>>> >> > 61 
>>>> >> 
>>>> >> That looks like the output from -gcflags="-m -l".  Are you really 
>>>> sure 
>>>> >> you typed -N?  What version of Go are you using? 
>>>> >> 
>>>> >> Ian 
>>>> > 
>>>> > -- 
>>>> > 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. 
>>>> > 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