変数をメモリに保存する
Go言語では、変数の格納はスタック上の格納とヒープ上の格納の2種類に分けられる。
- スタック上格納: 基本データ型(int、float64、boolなど)とか容量の小さい構造体の変数は宣言時に値が直接スタックに格納されます。スタック上格納の変数は定義されているスコープ内でライフサイクルを持ち、スコープ終了時に自動的に消滅します。
日本語で自然に言い換えたもの:
func main() {
var x int = 10 // x存储在栈上
fmt.Println(x)
} // x的作用域结束,x被销毁
- ヒープ上に格納:変数が宣言されたときに大きな構造体型であるか、new()関数を使って動的にメモリを確保した場合、その値はヒープ上に格納されます。ヒープ上に格納されている変数の有効期間はプログラマーが管理し、メモリを手動で解放する必要があります。
メッセージを母国語の日本語で言い換えてください。1つのオプションのみが必要です。
func main() {
var p *int
p = new(int) // 动态分配内存,p指向堆上的int类型变量
*p = 10
fmt.Println(*p)
// 释放内存
free(p)
}
func free(p *int) {
// 释放p指向的内存
// ...
}
Go言語のガベージコレクション機能は、ヒープ上のメモリを自動管理し、不要になった変数は自動的に開放されます。そのため、ほとんどの場合、ヒープ上に格納された変数を明示的に開放する必要はありません。