Golang初学者对函数返回值还是指针的测试
2016-10-20 01:15
302 查看
摘要: 不要用代码来做编译器该做的事情,忘掉C和Java吧
先把简单的代码贴出来,然后再废话。
先是benchmark的命令
然后是pprof的结果,先是pointer的,再是value的,可以看到pointer的报告2allocs/op
先把简单的代码贴出来,然后再废话。
先是benchmark的命令
go test -bench=Poin -memprofile=pointermem.pprof -memprofilerate=1 -benchmem
go test -bench=Value -memprofile=valuemem.pprof -memprofilerate=1 -benchmem
然后是pprof的结果,先是pointer的,再是value的,可以看到pointer的报告2allocs/op
package main type mytype struct { field1 string field2 string field3 string field4 string field5 string field6 string field7 string field8 string field9 string } func returnValue() mytype { return mytype{ field1: "abc", field2: "aaa", field3: "vvv", field4: "ddd", field5: "394834", field6: "sdfbd34534", field7: "asdf34534d90sdfsd", field8: "asdf3424jjiiihiu", field9: "vmxvbxcvb8rewasdfasdf", } } func returnPointer() *mytype { return &mytype{ field1: "abc", field2: "aaa", field3: "vvv", field4: "ddd", field5: "394834", field6: "sdfbd34534", field7: "asdf34534d90sdfsd", field8: "asdf3424jjiiihiu", field9: "vmxvbxcvb8rewasdfasdf", } } func main() { }
package main import ( "fmt" "testing" ) func BenchmarkReturnValue(b *testing.B) { var x mytype for i := 0; i < b.N; i++ { x = returnValue() fmt.Println(x) } } func BenchmarkReturnPointer(b *testing.B) { var x *mytype for i := 0; i < b.N; i++ { x = returnPointer() fmt.Println(*x) } }
相关文章推荐
- 返回值为函数指针的函数
- 关于函数返回值是指针的问题
- c语言的声明__它是指针?变量?还是函数呢?
- 返回值为指针的函数 字符串的拼接
- 返回值为引用或指针的成员函数加const要注意
- 【软件测试自动化-VBScript基础讲座 5】== 函数指针 ==
- 函数多个返回值(返回多个参数/局部变量)通过双重指针来实现
- 返回值是函数指针的函数使用方法
- 函数返回值系列之一返回指针类型的局部变量
- ”引用 & 指针“ -- 作为函数的参数和返回值小结
- 函数指针数组的妙用-用函数指针数据管理一系列 输入值 返回值 相同的函数
- 指针测试之函数中变量地址对齐情况
- 测试函数指针传参
- 还是指针和函数传参的问题
- 一个超简单,输出main函数返回值的函数,且是测试没有return语句的情况下哦~
- 2010.8.16 关于函数参数是指针、还是引用的区别
- 返回值是函数指针的函数示例
- C:返回值为指针的函数解读
- 使用指针做函数返回值
- 函数多个返回值(返回多个参数/局部变量)通过双重指针来实现