文档章节

Golang初学者对函数返回值还是指针的测试

Kyli
 Kyli
发布于 2016/10/20 00:36
字数 212
阅读 115
收藏 3
Go

先把简单的代码贴出来,然后再废话。

先是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)
	}

}

 

 

© 著作权归作者所有

Kyli
粉丝 4
博文 25
码字总数 4526
作品 0
高级程序员
私信 提问
加载中

评论(2)

Kyli
Kyli 博主
公司的小朋友希望用返回指针的方式来减少内存alloc,看了brad在日本的关于golang proile
chorchee
chorchee
新手,没看明白,还望解释解释
『Go 语言学习专栏』-- 第三期

大家好,我叫谢伟,是一名程序员。 本专栏的主旨是梳理 Golang 知识,力求从入门到中级程序员水平。 学习的过程中,希望不断把好的编程思维和思路引入到代码中,提高代码的美感、可靠性。 和...

谢小路
2018/05/09
0
0
深入分析golang多值返回以及闭包的实现

一、前言 golang有很多新颖的特性,不知道大家的使用的时候,有没想过,这些特性是如何实现的?当然你可能会说,不了解这些特性好像也不影响自己使用golang,你说的也有道理,但是,多了解底...

万建宁
2018/07/17
36
0
Go圣经-学习笔记入门-面试题

常问面试题 函数返回return XX, 是原子操作吗?(不是, 如果你看过雨痕老师的内存管理,就知道) 普通函数和闭包函数的区别有哪些?后者的应用场景在哪里?(闭包函数使用外部变量,是引用传递...

cdh0805010
2017/10/20
397
0
golang: 详解interface和nil

golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interfa...

陈亦
2014/01/19
23.4K
29
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
01/16
48
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
16分钟前
10
0
Java中的面向对象

一、面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现。 对象就是将函数,属性的一种封装。用人们思考习惯的方式思考问题。 如何自定义类 修饰符 类名{ //成...

zhiruochujian
25分钟前
3
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
27分钟前
20
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
40分钟前
7
0
Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
44分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部