2010-11-18 15 views
6

Estoy en una escuela de programación de juegos y aquí tenemos que aprender sobre la velocidad del código, algo que parece importante.C/C++ traducción al conjunto, comportamiento de memoria de bajo nivel: ¿cómo se hace?

¿Hay algún tutorial o lista de cosas a tener en cuenta al programar en C/C++?

Me pregunto acerca de muchas cosas, como por qué el comportamiento predeterminado de C es pasando datos en lugar de referencia/dirección, o cómo el compilador traduce una referencia al ensamblador, o cómo un bucle C se traduce a JMP.

Me preocupa porque python usa otra forma, pero, por otro lado, python no usa un operador para copiar el valor, sino una función que puede ser sintácticamente pesada.

Realmente no creo saber cómo programar en el montaje es realmente necesario, ya que es dolorosa, supongo que simplemente requiere para saber acerca de un registro, etc.

+1

En última instancia, esta pregunta se reduce a "¿Hay algún tutorial o lista de cosas a tener en cuenta al programar en C/C++?" Para eso, te dirijo aquí: [http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list] –

+1

Obligatorio "optimización prematura es malo" comentario aquí. Si sus algoritmos son 'O (demasiado)' (por ejemplo, en un juego basado en fichas, haciendo un bucle sobre todos los objetos del juego para descubrir si hay una X justo al lado del jugador), entonces el conocimiento profundo de C o de la Asamblea no puede posiblemente salvarte. Optimice sus propios esfuerzos de optimización: descubra dónde tiene sentido la optimización (mediante el uso de perfiles, no adivinando) y "optimice" con el pensamiento. Además, propably "no es una pregunta real". – delnan

+0

Necesita conocer el ensamblaje, para que comprenda cómo funciona realmente una computadora, para que pueda optimizarlo. –

Respuesta

6

Busque la documentación del compilador para el cambio a muestra el paso asm en lugar del código de la máquina. Cada compilador con el que he trabajado tiene uno. Úselo para enviar un código simple a asm y examinarlo.

VS también tiene la opción de 'ver ensamblaje' mientras avanza por el código.

No habrá una respuesta clara a su pregunta. Todo depende del compilador y la arquitectura. Incluso en los argumentos suministrados al compilador.

Editar:

El hecho de que no hay una respuesta clara a su pregunta no se detendrá la gente de hacer las cosas. Un ejemplo son cosas tontas como pasar un objeto grande (como una cadena: p) por referencia en lugar de devolver por valor. Estas cosas le parecerán razonables a un nuevo desarrollador de C++. POR SUPUESTO, pasar una cadena a una función para que se llene es más rápido que crear una copia y devolverla desde esa función solo para copiarla nuevamente en la tarea. El hecho es que no funciona de esa manera; es muy dependiente del compilador, pero podrías estar pisando fuerte sobre la capacidad de tu compilador para optimizar tratando de hacerlo todo inteligente.

Hay MUCHAS informaciones erróneas sobre cómo hacer que su código sea rápido. Toma todo con un grano de sal. La mayoría de las personas que dicen saber cómo hacer un código rápido están llenas de basura. La única respuesta razonable al código rápido es perfilar su código. Cuando llegue el momento de micro-optimizar, estarás haciendo un montón de cosas que son muy específicas para tu plataforma objetivo. Conocimiento general, "esto es más rápido", las cosas no te serán de utilidad en ese momento.

+0

Así que supongo que tengo que explorar los algoritmos de nivel superior y el patrón de diseño para llegar a una solución más rápida para cada situación. Aunque me pregunto cómo un motor como Quake3 es mucho más rápido. – jokoon

Cuestiones relacionadas