Go의 Slice 용량 문제: 크기 조정과 복사
Go에서 슬라이스는 배열을 관리하는 동적이고 효율적인 방법을 제공합니다. 새로운 요소가 추가됨에 따라 용량이 늘어날 수 있으므로 슬라이스에 해당 요소를 저장할 수 있는 충분한 공간이 확보됩니다. 그러나 요소가 제거될 때 슬라이스의 용량을 축소할 수 있는지 여부가 항상 명확하지는 않습니다.
다음 코드를 고려하세요.
package main import ( "math" "fmt" ) func main() { var a []int64 var i int64 upto := int64(math.Pow10(7)) for i = 0; i < upto; i++ { a = append(a, i) } fmt.Println(cap(a)) }
이 코드를 실행한 후 슬라이스 용량을 예상할 수 있습니다. 일부 요소를 제거한 후에는 더 작아집니다. 그러나 용량은 동일하게 유지됩니다. 이는 Go의 슬라이스 구현이 메모리 효율성보다 성능을 우선시하기 때문입니다.
용량을 줄이려면 원하는 용량으로 새 슬라이스를 만들고 관련 요소를 복사해야 합니다.
a = append([]int64(nil), a[:newSize]...)
이 작업은 슬라이스의 용량을 효과적으로 축소하지만 요소 복사도 포함하므로 큰 슬라이스의 경우 비용이 많이 들 수 있습니다.
이 제한이 있는지 여부 문제는 특정 사용 사례에 따라 다릅니다. 메모리 소비가 중요한 문제인 경우 위에서 설명한 기술을 사용하여 슬라이스 용량을 수동으로 관리해야 할 수도 있습니다. 그러나 대부분의 애플리케이션에서 Go 슬라이스의 편의성과 성능상의 이점은 용량 감소와 관련된 잠재적인 단점보다 더 큽니다.
위 내용은 Go 슬라이스의 용량을 어떻게 줄일 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!