PHpullh
학습 라이브러리/Go/이스케이프 분석

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 컴파일러의 이스케이프 분석을 이해하여 힙 할당을 최소화합니다.

이스케이프 분석 학습 시 주의할 점은 무엇인가요?

포인터를 반환하면 변수가 힙으로 이스케이프합니다. 성능이 중요한 경우 값 타입을 반환하는 것을 고려하세요.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.