刘桂祥, 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.