go string的内部实现

这个string的探索
来来个例子

func boo(a int, b int)(int, string){
    return a + b, "abcd"
}
81079 000000000044dfa0 :
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 
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 
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)把长度也填进去,

原文链接

你可能感兴趣的:(go string的内部实现)