Golang的储存机制主要包括变量储存、堆栈储存和垃圾回收。
1. 变量储存
在Golang中,变量可以储存在三个地方:全局变量区、局部变量区和命名空间。全局变量区和局部变量区是分开的,分别用于存储全局变量和函数内的局部变量。命名空间则是用于在不同包中访问变量。
示例代码:
package main
import "fmt"
// 全局变量
var globalVar int = 100
func main() {
// 局部变量
var localVar int = 10
fmt.Println(globalVar)
fmt.Println(localVar)
}
2. 堆栈储存
在Golang中,分配内存可以使用堆、栈或静态储存。堆和栈都是用于动态分配内存的,而静态储存则是指全局变量和静态变量。Golang中使用的是基于堆栈的分配器,它使用垃圾回收来管理堆内存。
堆栈储存的示例代码:
package main
import "fmt"
func main() {
// 使用堆
var ptr *int = new(int)
*ptr = 100
fmt.Println(*ptr)
// 使用栈
var x int = 10
fmt.Println(x)
}
3. 垃圾回收
Golang使用垃圾回收来管理堆内存,该机制可自动检测和释放不再使用的内存空间,从而避免内存泄漏。垃圾回收器会定期扫描堆内存,并标记不再使用的对象,然后将它们释放出来。
垃圾回收的示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 手动触发垃圾回收
runtime.GC()
// 让程序休眠一段时间,以便让垃圾回收机制扫描内存
time.Sleep(time.Millisecond * 100)
// 新建一个对象
var ptr *int = new(int)
*ptr = 100
fmt.Println(*ptr)
}