PHpullh
학습 라이브러리/Go/인라인 최적화

GO · 성능

인라인 최적화

Go 컴파일러의 함수 인라이닝을 이해하고 활용합니다. 작은 함수는 자동으로 인라인됩니다.

성능고급inlinecompileroptimizationgcflags

핵심 설명

Go 컴파일러의 함수 인라이닝을 이해하고 활용합니다. 작은 함수는 자동으로 인라인됩니다.

Go code

package main

import "fmt"

// 인라인 가능 (작은 함수)
func add(a, b int) int {
	return a + b
}

// 인라인 가능
func max(a, b int) int {
	if a > b { return a }
	return b
}

// 인라인 불가 (복잡한 함수)
func complexFunc(n int) int {
	sum := 0
	for i := 0; i < n; i++ {
		switch {
		case i%15 == 0: sum += 15
		case i%3 == 0:  sum += 3
		case i%5 == 0:  sum += 5
		default:        sum += i
		}
	}
	return sum
}

//go:noinline // 인라인 비활성화 (벤치마크용)
func addNoInline(a, b int) int {
	return a + b
}

func main() {
	fmt.Println(add(1, 2))
	fmt.Println(max(3, 5))

	fmt.Println("\n인라인 확인:")
	fmt.Println("  go build -gcflags='-m' main.go")
	fmt.Println("  'can inline add' → 인라인 가능")
	fmt.Println("  'inlining call to add' → 실제 인라인됨")
	fmt.Println()
	fmt.Println("Go 1.22+ mid-stack inlining 향상:")
	fmt.Println("  더 큰 함수도 인라인 가능")
}

학습 팁

인라인되는 함수는 함수 호출 오버헤드가 없어집니다. -gcflags='-m'로 인라인 여부를 확인하세요.

주의할 점

//go:noinline을 무분별하게 사용하면 최적화 기회를 잃습니다. 벤치마크 외에는 컴파일러에 맡기세요.

자주 묻는 질문

인라인 최적화란 무엇인가요?

Go 컴파일러의 함수 인라이닝을 이해하고 활용합니다. 작은 함수는 자동으로 인라인됩니다.

인라인 최적화 학습 시 주의할 점은 무엇인가요?

//go:noinline 을 무분별하게 사용하면 최적화 기회를 잃습니다. 벤치마크 외에는 컴파일러에 맡기세요.