>백엔드 개발 >Golang >Go 슬라이스를 슬라이싱하면 용량이 감소하는 이유는 무엇입니까?

Go 슬라이스를 슬라이싱하면 용량이 감소하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 00:10:14389검색

Why Does Slicing a Go Slice Reduce Its Capacity?

슬라이스 슬라이스: 용량 변화 이해

Go에서 슬라이스 작업을 할 때는 용량 개념을 이해하는 것이 중요합니다. 용량은 기본 배열을 재할당하지 않고 슬라이스가 보유할 수 있는 최대 요소 수를 나타냅니다. 슬라이싱은 기본 데이터를 복사하지 않지만 용량에 영향을 줄 수 있습니다.

s = s[2:] 용량을 줄이는 이유는 무엇입니까?

슬라이싱할 때 슬라이스를 사용하면 원래 기본 배열의 일부를 가리키는 새 슬라이스 헤더를 생성할 수 있습니다. 새 슬라이스의 용량은 참조하는 배열의 세그먼트에 따라 결정됩니다.

주어진 코드에서 s = s[:4]는 배열의 처음 4개 요소를 참조하는 슬라이스를 생성합니다. 슬라이스가 여전히 동일한 기본 배열을 가리키므로 용량은 6으로 변경되지 않습니다.

그러나 s = s[:0]의 결과는 용량이 6인 길이가 0인 슬라이스가 됩니다. 이제 배열의 시작 부분을 가리키므로 확장을 위한 충분한 공간이 있습니다.

s = s[2:]를 실행하면 슬라이스의 처음 두 요소가 삭제됩니다. 그러면 포인터가 새 슬라이스로 변경되어 기본 배열 아래를 가리키게 됩니다. 결과적으로, 슬라이스 이후 배열에 사용 가능한 요소가 4개만 남아 있기 때문에 용량이 4로 줄어듭니다.

절단 요소 복구

요소가 슬라이스에서 삭제된 경우 기본 배열을 수정하고 있으므로 동일한 변수를 사용하여 복구할 수 없습니다. 이러한 요소를 보존해야 하는 경우 원본 슬라이스를 참조하는 새 슬라이스를 생성할 수 있습니다.

슬라이스의 메모리 표현

슬라이스 용량을 더 잘 이해하려면 슬라이스는 메모리에 표시됩니다.

  • make([]byte, 5)는 다음과 같은 기본 바이트 배열을 사용하여 슬라이스를 생성합니다. 크기 5.
  • 배열에는 주소와 크기가 있으며 슬라이스 헤더에 저장됩니다.
  • 이 배열을 s = s[2:4]로 분할하면 새 슬라이스 헤더가 생성됩니다. 이는 기본 배열의 세 번째와 네 번째 요소를 가리킵니다.
  • 이 슬라이스의 용량은 슬라이스 뒤의 배열에서 사용 가능한 요소 수에 따라 결정됩니다. 이 경우에는 3개이고 나머지 2개는 사용할 수 없는 요소로 남습니다.

위 내용은 Go 슬라이스를 슬라이싱하면 용량이 감소하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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