C memset 함수에 해당하는 Go 함수가 있나요?
C에서 memset을 사용하면 특정 값으로 배열을 초기화할 수 있습니다. . 이 기능은 특히 효율적입니다. Go에서는 make([]int, 1000000)를 사용하여 모두 0으로 배열이나 슬라이스를 초기화하는 것이 간단합니다. 그러나 이는 0이 아닌 값으로 초기화하는 옵션을 제공하지 않습니다.
수동 초기화에 루프를 사용할 수 있지만 memset의 효율성이 부족합니다.
memset Analogs Go에서:
1. 루프 기반 접근 방식:
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
2. copy() 기반 접근 방식(권장):
copy() 함수는 고도로 최적화되어 있으며 memset 유사 작업에 활용할 수 있습니다.
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]) } }
이 솔루션은 첫 번째 요소를 수동으로 복사하고 copy()를 사용하여 이미 설정된 부분을 설정되지 않은 부분에 복사합니다. 알고리즘은 이중화 접근 방식을 사용하여 log(n)에 대한 반복 횟수를 줄입니다.
벤치마킹:
memsetLoop()에 대한 memsetRepeat() 벤치마킹은 눈에 띄는 성능을 보여줍니다. 요소 수가 증가할 때(특히 3800-4000개 정도) memsetRepeat()의 이점 elements.
추가 참고:
작은 조각의 경우 memsetLoop()가 약간 더 나은 성능을 발휘할 수 있습니다. 그러나 memsetRepeat()는 더 큰 조각에 대해 훨씬 더 나은 성능을 제공합니다.
위 내용은 C의 memset에 해당하는 빠르고 효율적인 Go가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!