function arguments and return values layout +------+-----+-------------------+--------+ | | | | | | func | Foo | (a bool, b int16) | []byte | unsafe.Sizeof(struct{a bool; b int16; c []byte}) | c1AB | c1AB| cRED | cRED | +------+-----+-------------------+--------+ | | +-----------=-+ +-=--------------------------+ | | v v +-----------------+-------------------------------+--------------------------------------+ | | | | | a bool, b int16 | | c reflect.SliceHeader | | cRED | | cRED | +-----------------+-=-----------------------------+--------------------------------------+ | | | | | : : : : : | | | | | v v v v v +---------+----------+----------------------------+-----------------+--------+-----------+ | | | | | | | | a bool, | b int16, | | c.Data uintptr, | c.Len, | c.Cap int | | cBLU | cPNK | | cGRE | cGRE | cGRE | +---------+----------+-=--------------------------+-----------------+--------+-----------+ | | | | | +---------+ argsize+32(FP)---=-+ | | | : | | | | | +-------------------------------------+ <-+ | | | | | cGRE | | | : | | c.Cap | | | | | | 64bit | | | | | +-------------------------------------+ <-=-|-=------------|---------+ | | cGRE | | | c.Cap+24(FP) | | c.Len | | | | | 64bit | | | | +-------------------------------------+ <-=-|-=------------+c.Len+16(FP) | | cGRE | | | | c.Data | | | | 64bit | | | +----+----+--------+------------------+ <-=-+c.Data+8(FP) | |cBLU|cAAA|cPNK |cAAA | +----> | a | | b | | |8bit|8bit| 16bit | 32bit | +----+----+--------+------------------+ <--=-0(FP) ^ ^ | | | +-=-b+2(FP) | +-=-a+0(FP)