Go에서 슬라이스 추가 작업 가속화
Go에서 슬라이스는 일련의 값을 저장하는 중요한 데이터 구조입니다. 슬라이스에 요소를 추가할 때 성능을 최적화하는 것이 중요합니다. 이 문서에서는 슬라이스에 추가하는 두 가지 방법인 추가와 직접 할당(=) 간의 성능 차이를 살펴봅니다.
벤치마크 분석
성능을 비교하기 위해 다음을 실행했습니다. 다음 코드를 사용하는 두 가지 벤치마크:
func BenchmarkSliceAppend(b *testing.B) { a := make([]int, 0, b.N) // Create an empty slice with sufficient capacity for i := 0; i < b.N; i++ { a = append(a, i) // Append i to the slice } } func BenchmarkSliceSet(b *testing.B) { a := make([]int, b.N) // Create a slice with size b.N for i := 0; i < b.N; i++ { a[i] = i // Assign i to the slice's ith element } }
벤치마크 결과에 따르면 직접 할당(a[i] = i)이 추가를 사용하는 것보다 훨씬 빠릅니다.
BenchmarkSliceAppend-4 200000000 7.87 ns/op 8 B/op 0 allocs/op BenchmarkSliceSet-4 300000000 5.76 ns/op 8 B/op
할당이 추가보다 빠른 이유는 무엇입니까?
성능 차이는 각 메서드에서 수행되는 고유한 작업에서 비롯됩니다.
Append (a = 추가(a, i)): 이 함수에는 다음이 포함됩니다. 더 복잡한 프로세스:
요약하면 각 추가 작업에는 슬라이스 헤더를 복사하고 임시 슬라이스를 생성하는 데 추가 오버헤드가 포함되는 반면, 직접 할당은 단순히 기존 슬라이스 요소를 수정합니다. 이러한 오버헤드는 관찰된 성능 차이의 원인이 됩니다.
권장 사항
슬라이스에 추가할 때 최적의 성능을 얻으려면 make를 반복적으로 사용하기보다는 make를 사용하여 충분한 용량을 미리 할당하는 것이 좋습니다. 추가 기능. 이렇게 하면 동적 메모리 할당 및 재슬라이싱이 필요하지 않아 효율성이 크게 향상됩니다.
위 내용은 Go에서 슬라이스 작업을 추가하는 것보다 직접 할당이 더 빠릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!