GO · 성능
메모리 할당 최적화
불필요한 힙 할당을 줄여 GC 압력을 낮춥니다. 슬라이스, 맵, 문자열 빌더의 사전 할당을 다룹니다.
성능중급allocationpreallocgcoptimization
핵심 설명
불필요한 힙 할당을 줄여 GC 압력을 낮춥니다. 슬라이스, 맵, 문자열 빌더의 사전 할당을 다룹니다.
Go code
package main
import (
"fmt"
"strings"
)
func main() {
n := 10000
// 나쁜 예: 반복적 재할당
s1 := make([]int, 0)
for i := 0; i < n; i++ {
s1 = append(s1, i) // 용량 초과 시 매번 재할당
}
// 좋은 예: 사전 할당
s2 := make([]int, 0, n)
for i := 0; i < n; i++ {
s2 = append(s2, i) // 재할당 없음
}
// 맵 사전 할당
m := make(map[string]int, n) // 힌트 제공
for i := 0; i < n; i++ {
m[fmt.Sprintf("key%d", i)] = i
}
// 문자열 빌더 사전 할당
var sb strings.Builder
sb.Grow(n * 10) // 예상 크기만큼 미리 할당
for i := 0; i < n; i++ {
fmt.Fprintf(&sb, "item%d,", i)
}
fmt.Printf("슬라이스: len=%d, cap=%d\n", len(s2), cap(s2))
fmt.Printf("맵: len=%d\n", len(m))
fmt.Printf("문자열: len=%d\n", sb.Len())
}학습 팁
make([]T, 0, n)으로 사전 할당하면 append 시 재할당이 발생하지 않아 GC 압력이 줄어듭니다.
주의할 점
make([]T, n)은 길이 n으로 초기화합니다(제로 값 채움). make([]T, 0, n)은 빈 슬라이스에 용량만 확보합니다.
자주 묻는 질문
메모리 할당 최적화란 무엇인가요?
불필요한 힙 할당을 줄여 GC 압력을 낮춥니다. 슬라이스, 맵, 문자열 빌더의 사전 할당을 다룹니다.
메모리 할당 최적화 학습 시 주의할 점은 무엇인가요?
make([]T, n) 은 길이 n으로 초기화합니다(제로 값 채움). make([]T, 0, n) 은 빈 슬라이스에 용량만 확보합니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.