go string的内部实现

384 阅读2分钟
原文链接: click.aliyun.com

go string的内部实现

stormbm 2018-10-23 10:51:29 浏览44 评论0

摘要: # 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

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的组合

用云栖社区APP,舒服~

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击 评论 (0) 点赞 (0) 收藏 (0)
分享到:

相关文章

网友评论