>백엔드 개발 >Golang >C의 memset에 해당하는 빠르고 효율적인 Go가 있습니까?

C의 memset에 해당하는 빠르고 효율적인 Go가 있습니까?

DDD
DDD원래의
2024-12-22 04:22:10126검색

Is there a fast and efficient Go equivalent to C  's memset?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.