Go에 memset과 동등한 것이 있나요?
C에서 memset 함수를 사용하면 특정 값을 가진 배열을 효율적으로 초기화할 수 있습니다. Go에서는 직접적으로 동등한 것은 없지만 여러 기술이 비슷한 결과를 얻을 수 있습니다.
루프 반복
가장 간단한 접근 방식은 루프를 사용하여 Go의 각 요소를 설정하는 것입니다. 원하는 값으로 배열
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
반복 copy()
매우 최적화된 copy() 기능을 활용하면 반복 복사 패턴을 활용하여 배열 값을 효율적으로 설정할 수 있습니다.
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }
벤치마크 결과
이러한 기술의 성능을 평가하기 위해 다양한 어레이에 대해 서로 벤치마킹합니다.
var a = make([]int, 1000) // Size will vary func BenchmarkLoop(b *testing.B) { for i := 0; i < b.N; i++ { memsetLoop(a, 10) } } func BenchmarkRepeat(b *testing.B) { for i := 0; i < b.N; i++ { memsetRepeat(a, 11) } }
결과에 따르면 memsetRepeat()는 더 큰 배열에 대해 memsetLoop()보다 성능이 뛰어나며 빠른 초기화에 대한 효율성이 입증되었습니다.
위 내용은 C의 memset과 유사하게 Go에서 배열을 효율적으로 초기화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!