code: func (encoder *mapEncoder) encodeBucketPtrArray(ctx context.Context, space []byte, count int, ptr unsafe.Pointer) []byte {
  	cursor := uintptr(ptr)
  	addrMap := ctx.Value(addrMapKey).(map[string]json.RawMessage)
  	space = append(space, '[')
  	for i := 0; i < count; i++ {
  		if i != 0 {
  			space = append(space, ',', ' ')
  		}
  		elemPtr := *(*unsafe.Pointer)(unsafe.Pointer(cursor + 8 * uintptr(i)))
  		space = append(space, `{"__ptr__":"`...)
  		elemPtrStr := ptrToStr(uintptr(elemPtr))
  		space = append(space, elemPtrStr...)
  		space = append(space, `"}`...)
  		if elemPtr != nil {
  			elemData := encoder.encodeBucket(ctx, nil, elemPtr)
  			addrMap[elemPtrStr] = json.RawMessage(elemData)
  		}
  	}
  	space = append(space, ']')
  	return space
  }
docs: // [N]*bmap