golang中 return如果返回指针比大型struct性能高

type tt struct{

aa int
bb int
cc int
str string

}

func func_rstruct () tt{

t:=tt{1,2,3,"88888888888"}

return t

}

func func_rpstruct () *tt{

t:=tt{1,2,3,"88888888888"}

return &t

}

func Benchmark_rstruct(t *testing.B) {

strs:=[CNT]string{}
for i:=0;i<CNT;i++ {
dat:= func_rstruct()
strs[i]=dat.str
}
t.Log("success"+strconv.Itoa(len(strs)))
}

func Benchmark_rpstruct(t *testing.B) {

strs:=[CNT]string{}
for i:=0;i<CNT;i++ {
dat:= func_rpstruct()
strs[i]=(*dat).str

}
t.Log("success"+strconv.Itoa(len(strs)))

}

result:

C:\Users\xinhua\workspace\testproj\src\main>go test -test.bench=".*"
Benchmark_rstruct-4 1000000000 0.29 ns/op
--- BENCH: Benchmark_rstruct-4
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
tmain_test.go:37: success1000000
... [output truncated]
Benchmark_rpstruct-4 1000000000 0.26 ns/op
--- BENCH: Benchmark_rpstruct-4
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
tmain_test.go:50: success1000000
... [output truncated]
PASS
ok _/C_/Users/xinhua/workspace/testproj/src/main 7.997s

上一篇:为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失


下一篇:managed_shared_memory.construct造成的性能损失