"Quer velocidade? Passar por valor" - Explorando implicações de desempenho
A declaração de Scott Meyers "Quer velocidade? Passar por valor" levanta questões sobre os benefícios de desempenho de passar objetos por valor versus por referência. Neste contexto, passar por valor envolve uma operação de cópia, enquanto passar por referência evita cópias desnecessárias.
Considere o seguinte exemplo com estruturas X e 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) {}
};
No construtor do X, o nome do argumento é copiado para um objeto temporário antes de invocar o construtor move em std::string para inicializar mem_name. No construtor de Y, o argumento name é uma referência const, mas uma cópia ainda é feita para inicializar mem_name. Portanto, X executa uma operação de "copiar e mover", enquanto Y executa uma única cópia.
De acordo com o argumento de Meyers, parece que a passagem por valor (como em X) poderia ser mais rápida devido a o potencial para otimizações, como otimização do valor de retorno (RVO). No entanto, um exame mais detalhado revela que o resultado depende do tipo de argumento que está sendo passado (lvalue ou rvalue):
Geralmente, um movimento é mais rápido do que passar um ponteiro, que é essencialmente o que a passagem por referência faz. Portanto, para rvalues, X tem desempenho melhor que Y, enquanto para lvalues, o desempenho é semelhante.
É importante observar que esta não é uma regra universal e as otimizações podem variar dependendo do compilador e da plataforma. A criação de perfil é recomendada para determinar a abordagem ideal em casos específicos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3