go语言调用append之后是否重新分配内存?
2017-04-21 21:32
295 查看
查看tidb源代码:::util/charset/charset.go,下面有段代码:
查看append,思考一个问题,调用本方法之后,descs内存地址是否重新分配?
特做如下例子进行测试:
运行结果如下:
从10次的输出结果来看,调用append内部函数,不改变内存地址,也就是不产生性能损耗。
// GetAllCharsets gets all charset descriptions in the local charsets. func GetAllCharsets() []*Desc { descs := make([]*Desc, 0, len(charsets)) // The charsetInfos is an array, so the iterate order will be stable. for _, ci := range charsetInfos { c, ok := charsets[ci.Name] if !ok { continue } desc := &Desc{ Name: c.Name, DefaultCollation: c.DefaultCollation.Name, Desc: c.Desc, Maxlen: c.Maxlen, } descs = append(descs, desc) } return descs }
查看append,思考一个问题,调用本方法之后,descs内存地址是否重新分配?
特做如下例子进行测试:
type Names struct { Name string }
mynames := make([]*Names, 0) for i := 0; i < 10; i++ { my := &Names{ Name: "append"} mynames = append(mynames, my) fmt.Println(&mynames) }
运行结果如下:
从10次的输出结果来看,调用append内部函数,不改变内存地址,也就是不产生性能损耗。
相关文章推荐
- go语言调用append之后是否重新分配内存?
- go语言内存分配之TCMalloc
- Go语言内存分配机制
- 关于,函数调用是传值调用,初始化函数中重新分配内存,导致形参的值和实参的值不一致 问题分析
- 对系统调用和内存分配检查是否执行成功
- 【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
- 一个Ip2long函数,通过调用go tool pprof分析,竟发现内存分配了3G
- JNI: Get/ReleaseStringUTFChars和Get/ReleaseIntArrayElements的区别,isCopy是否重新分配内存的问题
- 让new操作符不分配内存,只调用构造函数
- 学点 C 语言(23): 数据类型 - 给指针分配内存
- p重新调用多次new及delete的内存泄露问题
- 如何在Dll中分配内存,而在调用程序里释放
- C/C++ 语言中结构体的内存分配
- C语言中的内存分配深入(一)
- C 语言中的内存分配介绍
- 如何让new操作符不分配内存,只调用构造函数
- [读书笔记] go 语言如何处理系统调用
- C语言内存分配问题和C语言中的内存
- 显示调用构造函数 不分配内存
- 如何让new操作符不分配内存,只调用构造函数