分享
  1. 首页
  2. 文章

大佬们分析一下,为什么这种方式调用函数会慢10倍?

liubaorui · · 2084 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

考虑用T0是因为希望能写出对gc友好的代码 ```go package main import ( "testing" ) type Response struct { Name string Age int Hobby string } type Request struct { Name string Age int Hobby string } //考虑不用这种的原因是因为变量逃逸了,感觉大量使用这种方式对gc不太好 func Resp1(r *Request) *Response { return &Response{ r.Name, r.Age, r.Name, } } //这种方式没有逃逸,但是为什么速度会变慢?按理说和上面的速度应该是相当的啊。 func Resp0(r *Request, res *Response) { res.Age = r.Age res.Name = r.Name res.Hobby = r.Name } func T0() { resp := Response{} req := Request{Name: "111", Age: 10, Hobby: "code"} Resp0(&req, &resp) if resp.Age == 0 { return } } func T1() { req := Request{Name: "111", Age: 10, Hobby: "code"} resp := Resp1(&req) if resp.Age == 0 { return } } func BenchmarkT0AndT1(b *testing.B) { //BenchmarkT0AndT1/T0-16 519476035 2.229 ns/op 0 B/op 0 allocs/op b.Run("T0", func(b *testing.B) { for i := 0; i < b.N; i++ { T0()//大概慢了10倍,有点不可思议。 } }) //BenchmarkT0AndT1/T1-16 1000000000 0.2679 ns/op 0 B/op 0 allocs/op b.Run("T1", func(b *testing.B) { for i := 0; i < b.N; i++ { T1() //为什么这个会快得多? } }) //结果 //BenchmarkT0AndT1/T0-16 519476035 2.229 ns/op 0 B/op 0 allocs/op //BenchmarkT0AndT1/T1-16 1000000000 0.2679 ns/op 0 B/op 0 allocs/op } ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2084 次点击
6 回复 | 直到 2022年04月21日 20:43:34
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏