슬라이스 용량 변경의 미스터리
A Tour of Go는 슬라이스 조작을 보여주는 흥미로운 스니펫을 제공합니다. 슬라이스를 잘라서 길이를 0으로 두고 길이를 늘렸음에도 불구하고 마지막 줄에서 용량이 6에서 4로 떨어지는 이유가 수수께끼입니다.
슬라이스 내부 이해
이 수수께끼를 풀려면 슬라이스가 데이터를 배열에 저장한다는 점을 기억하는 것이 중요합니다. 두 개의 첫 번째 요소가 삭제되면 슬라이스의 시작이 오른쪽으로 이동하여 슬라이스의 시작 지점과 백업 배열의 끝 사이에 할당되지 않은 슬롯이 더 적게 남습니다.
반대로, 슬라이스 끝에서 요소를 제거하면 배열 내 슬라이스의 시작점과 배열 끝 사이의 거리가 변경되지 않기 때문에 용량에는 영향을 미치지 않습니다.
이러한 작업은 기본 배열에 영향을 주지 않고 슬라이스 구조만 수정한다는 점에 유의하는 것이 중요합니다.
예시 설명
슬라이스 헤더를 인쇄하면 발생하는 변경 사항에 대한 통찰력을 얻을 수 있습니다.
<code class="go">func printSlice(s []int) { sh := (*reflect.SliceHeader)(unsafe.Pointer(&s)) fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s) }</code>
마지막 단계에서 데이터 포인터가 향상되어 용량이 감소합니다.
결론
이 예에서는 슬라이싱 작업이 슬라이스의 구조를 어떻게 수정할 수 있는지 관찰합니다. 포인터를 조작하면 슬라이스에서 수행되는 특정 작업에 따라 용량 변경이 발생할 수 있습니다.
위 내용은 처음부터 요소를 제거하면 슬라이스 용량이 감소하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!