KDOC 414: インターフェースがヒープにエスケープされるのを見る

この文書のステータス

  • 作成
    • 2025-07-01 貴島
  • レビュー
    • 2025-07-19 貴島

概要

関数を抜けた後も使うようなケースでは、消されないようにスタックからヒープに移す必要がある。インターフェースを返すと、実体を関数から抜けた後も保持しておく必要があるため、ヒープにエスケープされる。

tmpfile=$(mktemp /tmp/tmpgo.XXXXXX.go)

cat > $tmpfile <<EOF
package main

func main() {}

func f() any {
  x := "hello"
  return x // ヒープへ
}

EOF

go build -gcflags="-m" -o bin $tmpfile 2>&1
rm bin
rm $tmpfile
/tmp/tmpgo.wTCwGe.go:3:6: can inline main
/tmp/tmpgo.wTCwGe.go:5:6: can inline f
/tmp/tmpgo.wTCwGe.go:7:10: x escapes to heap

関連

Backlinks