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.

Reply via email to