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)相关文章
- Go语言之嵌入类型
- Go语言之嵌入类型
- Go语言面组合式向对象编程基础总结
- 深入Go语言文本类型
- Go语言之标志符可见性
- Go语言之标志符可见性
- Protobuf和GRPC(一)
- Golang Http Server源码阅读
- 关于Go,你可能不注意的7件事(转的)
- 基于类型系统的面向对象编程语言Go