PHpullh
학습 라이브러리/Go/맵 사전 할당

GO · 성능

맵 사전 할당

make(map[K]V, hint)로 맵의 초기 크기를 지정하여 해시 테이블 리사이징을 줄입니다.

성능중급mappreallochinthash-table

핵심 설명

make(map[K]V, hint)로 맵의 초기 크기를 지정하여 해시 테이블 리사이징을 줄입니다.

Go code

package main

import (
	"fmt"
	"testing"
)

func mapWithoutHint(n int) map[int]int {
	m := make(map[int]int) // 기본 크기
	for i := 0; i < n; i++ {
		m[i] = i * i
	}
	return m
}

func mapWithHint(n int) map[int]int {
	m := make(map[int]int, n) // 크기 힌트
	for i := 0; i < n; i++ {
		m[i] = i * i
	}
	return m
}

func BenchmarkMapWithout(b *testing.B) {
	for i := 0; i < b.N; i++ {
		mapWithoutHint(10000)
	}
}

func BenchmarkMapWith(b *testing.B) {
	for i := 0; i < b.N; i++ {
		mapWithHint(10000)
	}
}

func main() {
	m1 := mapWithoutHint(100)
	m2 := mapWithHint(100)
	fmt.Println("크기:", len(m1), len(m2))

	// maps.Clone (Go 1.21+)
	// import "maps"
	// m3 := maps.Clone(m1)
	fmt.Println("맵 사전 할당으로 리사이징 횟수 감소")
}

학습 팁

맵 크기 힌트는 정확하지 않아도 됩니다. 대략적인 크기만 제공해도 리사이징이 크게 줄어듭니다.

주의할 점

맵의 크기 힌트는 용량이 아닌 버킷 수에 영향을 미칩니다. len(m)은 실제 요소 수를 반환하며 용량과 무관합니다.

자주 묻는 질문

맵 사전 할당란 무엇인가요?

make(map[K]V, hint) 로 맵의 초기 크기를 지정하여 해시 테이블 리사이징을 줄입니다.

맵 사전 할당 학습 시 주의할 점은 무엇인가요?

맵의 크기 힌트는 용량이 아닌 버킷 수에 영향을 미칩니다. len(m) 은 실제 요소 수를 반환하며 용량과 무관합니다.