GO · 성능
이스케이프 분석
Go 컴파일러의 이스케이프 분석을 이해하여 힙 할당을 최소화합니다.
성능고급escape-analysisstackheapcompiler
핵심 설명
Go 컴파일러의 이스케이프 분석을 이해하여 힙 할당을 최소화합니다.
Go code
package main
import "fmt"
// 스택에 할당됨 (이스케이프 안 함)
func stackAlloc() int {
x := 42 // 스택
return x
}
// 힙에 할당됨 (이스케이프)
func heapAlloc() *int {
x := 42 // 힙으로 이스케이프 (포인터가 반환됨)
return &x
}
// 인터페이스로 이스케이프
func interfaceEscape() {
x := 42
fmt.Println(x) // x가 any로 박싱 → 힙 할당
}
// 이스케이프 방지 패턴
type Result struct {
Value int
Err error
}
func compute() Result {
return Result{Value: 42} // 값 반환 → 스택 유지
}
func main() {
fmt.Println(stackAlloc())
fmt.Println(*heapAlloc())
fmt.Println(compute())
fmt.Println("\n이스케이프 분석 확인:")
fmt.Println(" go build -gcflags='-m' main.go")
fmt.Println(" go build -gcflags='-m -m' main.go # 더 상세")
}학습 팁
go build -gcflags='-m'로 이스케이프 분석 결과를 확인할 수 있습니다. escapes to heap이 핫스팟입니다.
주의할 점
포인터를 반환하면 변수가 힙으로 이스케이프합니다. 성능이 중요한 경우 값 타입을 반환하는 것을 고려하세요.
자주 묻는 질문
이스케이프 분석란 무엇인가요?
Go 컴파일러의 이스케이프 분석을 이해하여 힙 할당을 최소화합니다.
이스케이프 분석 학습 시 주의할 점은 무엇인가요?
포인터를 반환하면 변수가 힙으로 이스케이프합니다. 성능이 중요한 경우 값 타입을 반환하는 것을 고려하세요.