登录
首页 >  Golang >  Go教程

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

时间:2024-04-03 23:33:34 309浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《Go语言中形参是否占用内存?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

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语言中形参是否占用内存?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>