函数通过返回临时变量和直接赋值有效率差异吗?

比如:
func F( a int ) ( b Struct ) {
}
直接对b赋值和在函数内创建一个临时变量,最后返回效率一样吗?哪个快?
也就是说在go实现中会不会在被调用函数栈再创建一个临时变量?

共 4 个回复


captain

看过有些golang代码,是直接返回一个指针类型,因此猜测在函数里面的临时变量在函数结束不会消失,如果这是个返回值的话,直接返回这个变量的地址,对于大变量效率就会高很多,如果是小字符串或数字,还是直接返回一个值效率更高

# 0

David

go的局部变量需要的时候会从堆分配空间,所以其指针是可以返回的。所以,如果 Struct 如果比较大的话,建议用指针。

# 1

cuihonglei

我的意思是说,直接给b赋值和创建一个结构c,给c赋值,然后返回c,两者的差异
如:
func F( a int ) ( b Struct ) {
b.x,b.y = 100,100
return
}
func F( a int ) Struct {
var c Struct
c.x,c.y = 100,100
return c
}

# 2

xzgyb

我觉得效率上没啥区别,func F( a int ) ( b Struct ) , 这种形式免去了返回值的声明,但好像书上说,直接return,这不是好的习惯,通常也要return b

# 3