"¿Quieres velocidad? Pasar por valor" - Explorando las implicaciones en el rendimiento
La declaración de Scott Meyers "¿Quieres velocidad? Pasar por valor" plantea preguntas sobre los beneficios de rendimiento de pasar objetos por valor versus por referencia. En este contexto, pasar por valor implica una operación de copia, mientras que pasar por referencia evita copias innecesarias.
Considere el siguiente ejemplo con las estructuras 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) {}
};
En el constructor de X, el nombre del argumento se copia a un objeto temporal antes de invocar el constructor de movimiento en std::string para inicializar mem_name. En el constructor de Y, el nombre del argumento es una referencia constante, pero aún se realiza una copia para inicializar mem_name. Por lo tanto, X realiza una operación "copiar-luego-mover", mientras que Y realiza una sola copia.
Según el argumento de Meyers, parecería que pasar por valor (como en X) podría ser más rápido debido a el potencial de optimizaciones, como la optimización del valor de retorno (RVO). Sin embargo, un examen más detenido revela que el resultado depende del tipo de argumento que se pasa (lvalue o rvalue):
Generalmente, un movimiento es más rápido que pasar un puntero, que es esencialmente lo que hace el paso por referencia. Por lo tanto, para rvalues, X funciona mejor que Y, mientras que para lvalues, el rendimiento es similar.
Es importante tener en cuenta que esta no es una regla universal y las optimizaciones pueden variar según el compilador y la plataforma. Se recomienda elaborar perfiles para determinar el enfoque óptimo en casos específicos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3