在Go语言中,变量的存储可以分为两种情况:栈上存储和堆上存储。
示例:
func main() {
var x int = 10 // x存储在栈上
fmt.Println(x)
} // x的作用域结束,x被销毁
示例:
func main() {
var p *int
p = new(int) // 动态分配内存,p指向堆上的int类型变量
*p = 10
fmt.Println(*p)
// 释放内存
free(p)
}
func free(p *int) {
// 释放p指向的内存
// ...
}
需要注意的是,Go语言的垃圾回收机制会自动管理堆上的内存,当一个变量不再被引用时,垃圾回收机制会自动回收它所占用的内存空间。因此,大多数情况下,我们无需手动释放堆上存储的变量。