>백엔드 개발 >Golang >C의 memset과 동등한 Go: 0이 아닌 값으로 배열을 효율적으로 초기화하는 방법은 무엇입니까?

C의 memset과 동등한 Go: 0이 아닌 값으로 배열을 효율적으로 초기화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-20 00:38:13643검색

Go's Equivalent to C  's memset: How to Efficiently Initialize Arrays with Non-Zero Values?

C의 memset과 동일한 Go

원래 질문:

방법이 있나요? Go에서 이는 C의 memset 함수와 유사하며, 이를 통해 배열을 효율적으로 초기화할 수 있습니다. 0이 아닌 값이 있습니까?

답변:

Go는 표준 라이브러리에서 memset과 직접적으로 동등한 것을 제공하지 않습니다. 그러나 유사한 기능을 달성할 수 있는 여러 접근 방식이 있습니다.

루프 기반 솔루션:

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}

이 간단한 루프는 배열을 반복하고 v 값을 할당합니다.

최적화된 솔루션을 활용하여 copy():

Go의 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])
    }
}

이 솔루션은 첫 번째 요소를 수동으로 설정한 다음 반복적으로 복사합니다. 배열의 초기화된 부분을 나머지 요소에 적용합니다.

성능 비교:

벤치마크에 따르면 memsetRepeat 솔루션은 최적화된 copy() 기능으로 인해 더 큰 배열에 대한 루프 기반 접근 방식보다 성능이 뛰어난 것으로 나타났습니다.

요약하자면 Go 프로그래머는 다음 중 하나를 사용할 수 있습니다. 0이 아닌 값으로 배열을 초기화할 때 단순화를 위한 루프 기반 솔루션 또는 향상된 성능을 위한 최적화된 memsetRepeat 솔루션.

위 내용은 C의 memset과 동등한 Go: 0이 아닌 값으로 배열을 효율적으로 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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