On Mon, Jun 29, 2020 at 6:33 PM arthurwil...@gmail.com <arthurwilliammor...@gmail.com> wrote: > > On Monday, June 29, 2020 at 8:16:14 PM UTC-5 Ian Lance Taylor wrote: >> >> On Mon, Jun 29, 2020 at 5:32 PM Bill Morgan >> <arthurwil...@gmail.com> wrote: >> > >> > for this code: >> > >> > m := make(map[int]int, 9) >> > >> > I think the compiler creates a maptype that is stored at type.*+60480(SB) >> > that it uses for the call to runtime.makemap: >> > >> > m := make(map[int]int, 9) >> > 0x10d0b81 488d05f8ec0000 LEAQ type.*+60480(SB), AX >> > 0x10d0b88 48890424 MOVQ AX, 0(SP) >> > 0x10d0b8c 48c744240809000000 MOVQ $0x9, 0x8(SP) >> > 0x10d0b95 48c744241000000000 MOVQ $0x0, 0x10(SP) >> > 0x10d0b9e 6690 NOPW >> > 0x10d0ba0 e8fbdff3ff CALL runtime.makemap(SB) >> > >> > Where is the code in the compiler that creates the maptype? I'm wondering >> > how the bucket size is computed and how the rest of the maptype structure >> > is filled out. >> >> https://golang.org/src/cmd/compile/internal/gc/reflect.go#L189 >> >> > Is there a way to print out the type info stored in the binary? >> >> I'm not sure if this is what you want, but you can use reflect.TypeOf: >> https://play.golang.org/p/FEUIoqc6SMU . >> >> Ian > > Thanks Ian, that is pretty cool. I think that is printing out the map[int]int > type though instead of the *maptype that is generated by the compiler and > passed to runtime.makemap. > > I think this is loading a pointer to a maptype into AX to pass as the first > arg to runtime.makemap. The maptype seems to be stored at type.*+60480(SB). > > LEAQ type.*+60480(SB), AX > > here's the type I'm asking about: where is this guy created in the compiler? > > type maptype struct { > typ _type > key *_type > elem *_type > bucket *_type // internal type representing a hash bucket > // function for hashing keys (ptr to key, seed) -> hash > hasher func(unsafe.Pointer, uintptr) uintptr > keysize uint8 // size of key slot > elemsize uint8 // size of elem slot > bucketsize uint16 // size of bucket > flags uint32 > }
https://golang.org/src/cmd/compile/internal/gc/reflect.go#L1285 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+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUjPzFd4n0ER%3DFaCrTmdVoB_9P0Up1jSy%3DC2wghOUQS9w%40mail.gmail.com.