> 백엔드 개발 > Golang > Go Slices: 심층 복사를 위한 추가 및 복사 – 어느 것이 더 효율적인가요?

Go Slices: 심층 복사를 위한 추가 및 복사 – 어느 것이 더 효율적인가요?

Mary-Kate Olsen
풀어 주다: 2024-12-10 21:00:15
원래의
625명이 탐색했습니다.

Go Slices:  Append vs. Copy for Deep Copying – Which is More Efficient?

효율적인 슬라이스 딥 카피

Go에서 슬라이스의 딥 카피를 생성하려면 해당 내용을 별도의 메모리 위치에 복제해야 합니다. 이렇게 하면 한 슬라이스에 대한 수정 사항이 다른 슬라이스에 영향을 주지 않습니다.

전체 복사에 대한 한 가지 접근 방식은 추가 기능을 사용하는 것입니다.

copy := append([]T{}, orig...)
로그인 후 복사

여기서는 원본 슬라이스 원본이 다음에 추가됩니다. 빈 슬라이스, 자체 백업 배열로 새 슬라이스 복사본을 생성합니다.

대체 방법은 내장 복사본을 사용하는 것입니다. 함수:

cpy := make([]T, len(orig))
copy(cpy, orig)
로그인 후 복사

이 접근 방식은 orig의 요소를 새로 생성된 슬라이스 cpy로 직접 복사합니다.

두 솔루션 모두 슬라이스의 값을 효과적으로 복사합니다. 그러나 슬라이스에 포인터 또는 포인터 필드가 있는 구조체가 포함된 경우 이러한 포인터 값은 여전히 ​​원래 슬라이스와 동일한 위치를 참조한다는 점에 유의하는 것이 중요합니다.

두 가지 방법을 벤치마킹하면 비슷한 성능을 얻을 수 있습니다.

BenchmarkCopy     100000         24724 ns/op
BenchmarkAppend   100000         24967 ns/op
로그인 후 복사

어셈블리 코드는 추가와 복사 모두 작업의 일부로 메모리 제로 채우기를 수행할 가능성이 있음을 보여줍니다.

궁극적으로 추가 방법과 복사 방법 사이의 선택은 개인의 선호도와 성능 고려 사항에 따라 달라집니다. 그러나 두 접근 방식 모두 효과적으로 슬라이스 전체를 복사하여 별도의 슬라이스 데이터 인스턴스로 작업할 때 데이터 무결성을 보장합니다.

위 내용은 Go Slices: 심층 복사를 위한 추가 및 복사 – 어느 것이 더 효율적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿