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.