KDOC 413: ローカル変数がヒープにエスケープされるのを見る
この文書のステータス
- 作成
- 2025-07-01 貴島
- レビュー
- 2025-07-19 貴島
概要
関数を抜けた後も使うようなケースでは、関数呼び出し後に消されないようにスタックからヒープに移す必要がある。後も使うケースとしては、ポインタを返すなどがある。ローカル変数として宣言されていても、ヒープに移動させられる。
tmpfile=$(mktemp /tmp/tmpgo.XXXXXX.go) cat > $tmpfile <<EOF package main func main() {} func f() *int { x := 42 return &x // ヒープへ } EOF go build -gcflags="-m" -o bin $tmpfile 2>&1 rm bin rm $tmpfile
/tmp/tmpgo.G6OymE.go:3:6: can inline main /tmp/tmpgo.G6OymE.go:5:6: can inline f /tmp/tmpgo.G6OymE.go:6:9: moved to heap: x
関連
- KDOC 411: スタックは積み重ねて取り出して解放する。ではヒープは?。ヒープを調べるきっかけになった