go语言
形参在函数栈上分配内存:值传递机制:形参是源值的副本,原值不会被修改。内存分配:形参分配的内存大小取决于数据类型,例如:基础数据类型:预定义大小指针类型:8字节结构体类型:成员变量内存之和slice类型:24字节(长度、容量和指向底层数组)map类型:8字节(指向底层哈希表)
Go 语言中形参内存占用的机制解析
引言
Go 语言中的形参在函数执行期间分配内存。了解形参的内存占用机制对于编写高效的代码非常重要。本文将深入探讨形参内存占用的机制,并通过一个实战案例进行说明。
立即学习
“
go语言免费学习笔记(深入)
”;
值传递 vs 引用传递
Go 语言使用值传递机制,这意味着传递给函数的形参是源值的副本。原值不会被修改,除非显式地修改副本。
形参内存占用
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
形参在函数栈中分配内存。栈是一个先进后出的数据结构,函数执行时使用栈来管理局部变量。形参分配的内存大小取决于其数据类型。
基础数据类型(如 int、float64)占用预定义的内存大小。
指针类型(如 *int)占用 8 字节的内存,因为 Go 语言指针始终为 8 字节。
结构体类型占用其成员变量内存之和。
slice 类型占用 24 字节的内存:8 字节用于长度,8 字节用于容量,8 字节用于指向底层数组。
map 类型占用 8 字节的内存用于指向底层哈希表。
实战案例
考虑以下代码:
在这个案例中,
函数的形参
和
分配在函数栈上。它们分别占用 4 字节和 4 字节的内存。在函数执行期间,对
的修改只影响函数内的副本,而不会影响
函数中的原值
。
结论
理解形参内存占用的机制对于编写高效的 Go 语言代码至关重要。通过使用值传递和在函数栈上分配内存,Go 语言提供了对内存管理的有效控制。
func add(x, y int) {
x += y
}
func main() {
a, b := 10, 5
add(a, b)
}addxyxmaina