go string 内部实现
这个string的探索
来来个例子
func boo(a int, b int)(int, string){
return a + b, "abcd"
}
81079 000000000044dfa0 <main.boo>:
81080 44dfa0:>------48 c7 44 24 18 00 00 >--movq $0x0,0x18(%rsp)
81081 44dfa7:>------00 00-
81082 44dfa9:>------0f 57 c0 >--xorps %xmm0,%xmm0
81083 44dfac:>------0f 11 44 24 20 >--movups %xmm0,0x20(%rsp)
81084 44dfb1:>------48 8b 44 24 08 >--mov 0x8(%rsp),%rax
81085 44dfb6:>------48 03 44 24 10 >--add 0x10(%rsp),%rax
81086 44dfbb:>------48 89 44 24 18 >--mov %rax,0x18(%rsp)
81087 44dfc0:>------48 8d 05 d4 eb 01 00 >--lea 0x1ebd4(%rip),%rax # 46cb9b <go.string.*+0xbb>
81088 44dfc7:>------48 89 44 24 20 >--mov %rax,0x20(%rsp)
81089 44dfcc:>------48 c7 44 24 28 04 00 >--movq $0x4,0x28(%rsp)
81090 44dfd3:>------00 00-
81091 44dfd5:>------c3 >--retq---
其中
81087 44dfc0:>------48 8d 05 d4 eb 01 00 >--lea 0x1ebd4(%rip),%rax # 46cb9b <go.string.*+0xbb>
81088 44dfc7:>------48 89 44 24 20 >--mov %rax,0x20(%rsp)
81089 44dfcc:>------48 c7 44 24 28 04 00 >--movq $0x4,0x28(%rsp)
81090 44dfd3:>------00 00-
81091 44dfd5:>------c3 >--retq---
lea 0x1ebd4(%rip),%rax
得到char*, mov %rax,0x20(%rsp)
复制给返回值, movq $0x4,0x28(%rsp)
把长度也填进去,
其实可以看到string就是c里面的char* 和len的组合