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



0 Answers

si tienes algo como:

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

// some code

v = foo();

Obtuviste una copia en C ++ 03, mientras que tienes una asignación de movimiento en C ++ 11. para que tenga optimización gratuita en ese caso.

Question

A veces se afirma que C ++ 11/14 puede obtener un impulso en el rendimiento, incluso cuando se trata simplemente de compilar el código C ++ 98. La justificación suele ser similar a la semántica de movimientos, ya que en algunos casos los constructores de rvalue se generan automáticamente o ahora forman parte de la STL. Ahora me pregunto si estos casos ya estaban manejados por RVO u otras optimizaciones de compiladores similares.

Mi pregunta es si podría darme un ejemplo real de una pieza de código C ++ 98 que, sin modificaciones, se ejecuta más rápido utilizando un compilador que soporte las nuevas características del lenguaje. Entiendo que un compilador estándar no es necesario para hacer la elisión de copia y simplemente por esa razón la semántica del movimiento puede generar velocidad, pero me gustaría ver un caso menos patológico, si se quiere.

EDITAR: Para ser claros, no estoy preguntando si los nuevos compiladores son más rápidos que los viejos compiladores, sino más bien si hay un código por el cual añadiendo -std = c ++ 14 a mis indicadores del compilador se ejecutaría más rápido (evite las copias, pero si puede proponer algo más aparte de la semántica de movimiento, me interesaría también)




Related