Voy a ser el que vaya contra la corriente aquí y decir, nunca es demasiado temprano para aprender sobre optimizaciones, especialmente optimizaciones de ensamblaje y, lo que es más importante, depuración en ensamblaje. Creo que obtendrás el máximo beneficio si eres un estudiante (porque entonces tienes muy poco que perder [es decir, en cuanto al tiempo / dinero]) y mucho que ganar.
Si está en la industria y no tiene la tarea de retocar en el ensamblaje, entonces no lo haga. De lo contrario, si eres estudiante o tienes tiempo en general, encontraría el tiempo para aprender a desmontar programas y ver si puedo encontrar una solución mejor que el compilador. Si no puedo, a quién le importa! Acabo de aprender a escribir, así como al compilador y eso es una GRAN ventaja cuando te enfrentas a un error en el código de lanzamiento (sin símbolos de depuración) y miras el desmontaje porque eso es lo único que puedes ver.
La respuesta
Este es uno de los mejores recursos que he encontrado para aprender sobre optimizaciones.
http://www.agner.org/optimize/
El despotricar
Si lee algunos artículos de los principales desarrolladores (por ejemplo, el razonamiento detrás de la creación de EASTL y una inspección más cercana del código lo llevará a comentarios como este porque GCC es terrible al incluir esta declaración if que le dirá, lo que la mayoría de la gente dice que confías en que el compilador no siempre es correcto, ESPECIALMENTE en el desarrollo de juegos) y luego pones un pie en la industria, encontrarás que las optimizaciones son algo cotidiano y saber lo que significa la salida del ensamblaje es una gran ventaja. Además, las personas no parecen darse cuenta (especialmente en stackoverflow) de que la creación de perfiles de juegos es muy difícil y no siempre precisa.
Sin embargo, hay una advertencia. Puedes pasar tiempo optimizando algo y luego darte cuenta de que fue una pérdida de tiempo. Pero que aprendiste? Aprendiste a no repetir ese mismo error en una circunstancia similar.
Lo que SO está tomando ahora es, en mi opinión, una postura religiosa a la declaración que no se optimiza hasta su perfil y no se preocupe, el compilador sabe mejor que usted . Se dificulta el aprendizaje. Conozco a expertos en la industria a quienes se les paga muy buen dinero (y quiero decir, MUY buen dinero) para jugar en el ensamblaje para optimizar el juego y depurarlo porque el compilador es malo o simplemente no puede ayudarte, porque, bueno, no puede (fallas relacionadas con GPU, fallas donde los datos involucrados son imposibles de leer en un depurador, etc., etc.)
¡Qué pasa si alguien a quien le encanta hacer eso, aún no se ha dado cuenta completamente, hace la pregunta aquí y es rechazado / apagado por las muchas respuestas que el compilador conoce mejor que usted! y nunca se convierte en uno de esos programadores altamente pagados?
Un pensamiento final. Si comienza a hacer esto temprano, descubrirá que pronto comenzará a escribir código que es peor, no tiene mejoras de rendimiento porque el compilador lo optimizó de la misma manera o, en el mejor de los casos, tiene algunas mejoras de rendimiento porque ahora el compilador puede optimizarlo . En cualquier caso, se ha convertido en un hábito, y no es más lento para escribir código de esta manera que antes. Un par de ejemplos son (hay muchos más):
- Incremento previo a menos que realmente desee un incremento posterior
- Escribir bucles para contenedores utilizando una variable de tamaño local constante en lugar de llamar a size () en el contenedor dentro del bucle.
EDITAR: Actualización después de 8 años más en la industria. Aprender montaje. Aprenda cómo funcionan los optimizadores y el ensamblaje que generan (CompilerExplorer es una gran herramienta para eso). Me he encontrado con innumerables bloqueos en las compilaciones de prueba (compilaciones optimizadas para pruebas internas) en las que no puede confiar en el depurador incluso con símbolos de depuración. El compilador ha optimizado demasiadas cosas y el ensamblaje es su única fuente de información valiosa para encontrar el error del volcado de memoria. Cada construcción demora entre 30 y 40 minutos si tiene suerte y es el primero en la cola de construcción, por lo que no puede confiar en algunas técnicas tradicionales para aislar el error. El modo multijugador empeora las cosas. Conocer el ensamblaje y cómo leer el ensamblaje optimizado simplemente lo hará mejor y, en última instancia, más valioso para el equipo.