Go语言中形参是否占用内存?
短信预约 -IT技能 免费直播动态提醒
go语言中,值类型的形参不会占用额外内存,而引用类型的形参会占用指向堆中实际数据的指针的大小。
Go 语言中形参是否占用内存
在 Go 语言中,形参是传递给函数的参数。对于值类型(int、float、string),形参存储在函数的栈帧中。对于引用类型(slice、map、channel),形参存储在函数栈帧中指向堆中实际数据的指针。
是否占用内存
形参是否占用内存取决于参数传递机制。Go 语言采用值传递机制,即形参是实参的副本。因此,值类型的形参不会占用额外的内存,而引用类型的形参会占用指向堆中实际数据的指针的大小。
实战案例:
以下代码演示了值类型和引用类型的形参内存占用情况:
package main
import "fmt"
func main() {
// 值类型
var a int = 100
b := a // 赋值,b 是 a 的副本
// 引用类型
slice := []int{1, 2, 3}
slc := slice // 赋值,slc 是 slice 的指针副本
fmt.Printf("a: %d (栈)\n", a)
fmt.Printf("b: %d (栈)\n", b)
fmt.Printf("slice: %p (堆)\n", &slice)
fmt.Printf("slc: %p (栈)\n", &slc)
}
输出结果:
a: 100 (栈)
b: 100 (栈)
slice: 0xc0000a8040 (堆)
slc: 0xc0000a8038 (栈)
从输出结果可以看出,值类型形参 b 存储在栈中,占用 4 字节的内存。引用类型形参 slc 也存储在栈中,占用 8 字节的内存,指向堆中实际数据的指针。
以上就是Go语言中形参是否占用内存?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341