질문:
배열이 슬라이스보다 빠르다는 기대에도 불구하고 연속적인 특성을 갖고 있기 때문에 경험적 테스트에 따르면 로컬 슬라이스에 액세스할 때 로컬 슬라이스가 로컬 배열보다 훨씬 더 빠른 것으로 나타났습니다. 요소. 왜 그럴까요?
배경:
글로벌 및 로컬 변형을 포함하여 배열 및 슬라이스 요소에 액세스하는 성능을 비교하기 위해 벤치마크 테스트가 수행되었습니다. 놀랍게도 로컬 슬라이스가 가장 빠른 옵션으로 나타났습니다.
답변:
로컬 어레이 및 슬라이스 벤치마크의 amd64 어셈블리를 조사한 결과 잠재적인 원인이 밝혀졌습니다. 두 방법 모두 비슷한 작업을 사용하지만 배열 버전은 액세스할 때마다 메모리에서 배열 주소를 반복적으로 로드합니다.
LEAQ "".a+1000(SP),BX
반면에 슬라이스 버전은 주로 레지스터에서 작동하며 메모리에서 초기 로드를 한 번만 수행합니다.
LEAQ (DX)(SI*1),BX
또한 어레이 버전은 Runtime.duffcopy 어셈블리 루틴을 호출하지만 슬라이스 버전은 호출하지 않습니다. 이러한 추가 런타임 호출은 어레이 버전의 성능 저하에 영향을 미칠 수 있습니다.
추가 참고 사항:
관찰된 성능 불일치는 어레이/슬라이스 크기의 변화에 관계없이 지속됩니다. 요소 유형 및 벤치마크 실행 순서.
위 내용은 요소 액세스 시 로컬 Go 슬라이스가 로컬 배열보다 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!