속도를 원하시나요? 값에 의한 전달: 성능 고려 사항
"속도를 원하십니까? 값에 의한 전달" 원칙은 값에 의한 인수 전달이 때때로 복사 제거로 인해 성능을 향상시킬 수 있음을 시사합니다. 설명을 위해 X 및 Y 클래스를 사용하는 다음 코드를 살펴보겠습니다.
struct X {
std::string mem_name;
X(std::string name) : mem_name(std::move(name)) {}
};
struct Y {
std::string mem_name;
Y(const std::string &name) : mem_name(name) {}
};
int main() {
X(foo());
Y(foo());
}
여기에서 foo()는 X 및 Y 생성자 모두에 전달되는 임시 문자열을 반환합니다. X가 mem_name을 초기화할 때 std::string의 이동 생성자를 호출하여 잠재적으로 문자열 복사를 방지합니다. 그러나 Y가 mem_name을 초기화할 때 문자열 참조를 복사해야 합니다.
Lvalue 대 Rvalue 인수:
lvalue(비임시)가 전달되면 두 X 모두 Y는 복사를 수행합니다. 또한 X는 이동을 수행합니다. rvalue(임시)의 경우 X는 이동만 수행할 수 있지만 Y는 여전히 복사를 수행해야 합니다.
성능에 미치는 영향:
일반적으로 이동은 전달보다 빠릅니다. 포인터(참조로 전달하는 것과 동일) 따라서 X는 lvalue에 대해 Y와 유사한 성능을 갖고 rvalue에 대해 더 나은 성능을 갖습니다.
주의:
"속도를 원하십니까? 값을 전달하십시오"는 설득력 있는 아이디어이지만, 그것은 현명하게 적용되어야 한다. 대규모 데이터 구조 복사와 관련된 특정 컨텍스트 및 잠재적인 오버헤드를 고려하는 것이 중요합니다. 실제 성능에 미치는 영향을 확인하려면 프로파일링을 권장합니다.
추가 리소스:
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3