>백엔드 개발 >Golang >요소 액세스 시 로컬 Go 슬라이스가 로컬 배열보다 빠른 이유는 무엇입니까?

요소 액세스 시 로컬 Go 슬라이스가 로컬 배열보다 빠른 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-16 02:26:20207검색

Why Are Local Go Slices Faster Than Local Arrays for Element Access?

배열 대 슬라이스: 요소 액세스 속도

질문:

배열이 슬라이스보다 빠르다는 기대에도 불구하고 연속적인 특성을 갖고 있기 때문에 경험적 테스트에 따르면 로컬 슬라이스에 액세스할 때 로컬 슬라이스가 로컬 배열보다 훨씬 더 빠른 것으로 나타났습니다. 요소. 왜 그럴까요?

배경:

글로벌 및 로컬 변형을 포함하여 배열 및 슬라이스 요소에 액세스하는 성능을 비교하기 위해 벤치마크 테스트가 수행되었습니다. 놀랍게도 로컬 슬라이스가 가장 빠른 옵션으로 나타났습니다.

답변:

로컬 어레이 및 슬라이스 벤치마크의 amd64 어셈블리를 조사한 결과 잠재적인 원인이 밝혀졌습니다. 두 방법 모두 비슷한 작업을 사용하지만 배열 버전은 액세스할 때마다 메모리에서 배열 주소를 반복적으로 로드합니다.

LEAQ    "".a+1000(SP),BX

반면에 슬라이스 버전은 주로 레지스터에서 작동하며 메모리에서 초기 로드를 한 번만 수행합니다.

LEAQ    (DX)(SI*1),BX

또한 어레이 버전은 Runtime.duffcopy 어셈블리 루틴을 호출하지만 슬라이스 버전은 호출하지 않습니다. 이러한 추가 런타임 호출은 어레이 버전의 성능 저하에 영향을 미칠 수 있습니다.

추가 참고 사항:

관찰된 성능 불일치는 어레이/슬라이스 크기의 변화에 ​​관계없이 지속됩니다. 요소 유형 및 벤치마크 실행 순서.

위 내용은 요소 액세스 시 로컬 Go 슬라이스가 로컬 배열보다 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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