c++ ¿Puede el moderno C ++ obtener rendimiento de forma gratuita?




1 Answers

si tienes algo como:

std::vector<int> foo(); // function declaration.
std::vector<int> v;

// some code

v = foo();

Obtuvo una copia en C ++ 03, mientras que recibió una asignación de movimiento en C ++ 11. Así que tienes optimización libre en ese caso.

c++ performance c++11 move-semantics c++14

A veces se afirma que C ++ 11/14 puede obtener un aumento de rendimiento incluso cuando simplemente compila código de C ++ 98. La justificación es generalmente en la línea de semántica de movimientos, ya que en algunos casos los constructores de valores se generan automáticamente o ahora forman parte de la STL. Ahora me pregunto si estos casos ya fueron manejados por RVO o por optimizaciones de compiladores similares.

Entonces, mi pregunta es si podría darme un ejemplo real de un fragmento de código de C ++ 98 que, sin modificaciones, se ejecute más rápido utilizando un compilador que admita las nuevas características de idioma. Entiendo que no se requiere que un compilador que cumpla con los estándares para hacer la elision de la copia y solo por esa razón, mover la semántica podría generar velocidad, pero me gustaría ver un caso menos patológico, por así decirlo.

EDITAR: Para ser claro, no estoy preguntando si los compiladores nuevos son más rápidos que los compiladores antiguos, sino si existe un código mediante el cual agregar -std = c ++ 14 a las banderas de mi compilador se ejecutaría más rápido (evite las copias, pero si puedo llegar a cualquier otra cosa además de mover semántica, también me interesaría)




Related