Go语言中形参是否占用内存?

go语言中,值类型的形参不会占用额外内存,而引用类型的形参会占用指向堆中实际数据的指针的大小。Go 语言中形参是否占用内存
在 Go 语言中,形参是传递给函数的参数。对于值类型(int、float、string),形参存储在函数的栈帧中。对

go语言中,值类型的形参不会占用额外内存,而引用类型的形参会占用指向堆中实际数据的指针的大小。

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语言中形参是否占用内存?的详细内容,更多请关注叮当号网其它相关文章!

文章来自互联网,只做分享使用。发布者:老板不要肥肉,转转请注明出处:https://www.dingdanghao.com/article/304885.html

(0)
上一篇 2024-04-04 08:40
下一篇 2024-04-04 08:40

相关推荐

联系我们

在线咨询: QQ交谈

邮件:442814395@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信公众号