16.7 使用值类型时误用指针
将一个值类型作为一个参数传递给函数或者作为一个方法的接收者,似乎是对内存的滥用,因为值类型一直是传递拷贝。但是另一方面,值类型的内存是在栈上分配,内存分配快速且开销不大。如果你传递一个指针,而不是一个值类型,Go 编译器大多数情况下会认为需要创建一个对象,并将对象移动到堆上,所以会导致额外的内存分配:因此当使用指针代替值类型作为参数传递时,我们没有任何收获。
链接
- 目录
- 上一节:使用指针指向接口类型
- 下一节:误用协程和通道
将一个值类型作为一个参数传递给函数或者作为一个方法的接收者,似乎是对内存的滥用,因为值类型一直是传递拷贝。但是另一方面,值类型的内存是在栈上分配,内存分配快速且开销不大。如果你传递一个指针,而不是一个值类型,Go 编译器大多数情况下会认为需要创建一个对象,并将对象移动到堆上,所以会导致额外的内存分配:因此当使用指针代替值类型作为参数传递时,我们没有任何收获。
第 1 章:Go 语言的起源,发展与普及
第 2 章:安装与运行环境
第 3 章:编辑器、集成开发环境与其它工具
第 4 章:基本结构和基本数据类型
第 5 章:控制结构
第 6 章:函数 (function)
第 7 章:数组与切片
第 8 章:Map
第 9 章:包 (package)
第 10 章:结构 (struct) 与方法 (method)
第 11 章:接口 (interface) 与反射 (reflection)
第 12 章:读写数据
第 13 章:错误处理与测试
第 14 章:协程 (goroutine) 与通道 (channel)
第 15 章:网络、模板与网页应用
第 16 章:常见的陷阱与错误
第 17 章:模式
第 18 章:出于性能考虑的实用代码片段
第 19 章:构建一个完整的应用程序
第 20 章:Go 语言在 Google App Engine 的使用
第 21 章:真实世界中 Go 的使用