Go谣言:指针传递比值传递效率高

这是很多Go开发者的误区,喜欢用户指针传递而非值传递,想当然认为指针传递比值传递的速度快,因为减少了内存拷贝。你是否也是这样觉得呢?


Go谣言:指针传递比值传递效率高

如果你这样觉得可能是受 C语言的影响,在C语言里面指针传递的确比值传递效率高,但Go 确不一定,因为Go是一门带 gc 的语言。当你向函数传递指针的时候,Go 需要执行逃逸分析确定变量应该存储在堆上还是栈上,这就需要消耗大量时间。退一步说,即便对象是放在堆上面,那么堆内存 gc 的回收也需要消耗时间。所以在Go里面指针传递未必比值传递更快。通常取决于对象大小,如果对象本身很大的情况下,指针传递的确会稍好一点,但如果小对象,使用值传递速度快。

如果大家对分析Go 逃逸分析感兴趣的可以在编译的时候执行

go build -gcflags="-m"

如果输出里面有 ”escapes to heap“ 就说明逃逸到堆上了。

其实Go里面很多时候并不需要,除非需要修改 struct 内部数据,譬如需要修改name的内容,如下:

func (p *person) rename(s string) {
   p.name = s 
}
func (p *person) printName() {
  fmt.Println(p.name)
}

很多时候并不一定需要指针传递。

展开阅读全文

页面更新:2024-05-19

标签:比值   指针   想当然   开发者   谣言   变量   函数   误区   消耗   很大   大小   对象   内存   语言   时间   喜欢   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top