Quiere saber si el compilador produjo "código limpio, conciso y rápido".
"Limpiar" tiene poco significado aquí. El código limpio es un código que promueve la legibilidad y el mantenimiento, por parte de los seres humanos. Por lo tanto, esta propiedad se relaciona con lo que ve el programador, es decir, el código fuente. No hay ninguna noción de limpieza para el código binario producido por un compilador que solo será examinado por la CPU. Si escribió un buen conjunto de clases para resumir su problema, entonces su código es tan limpio como pueda.
"Código conciso" tiene dos significados. Para el código fuente, se trata de guardar los escasos recursos de ojo y cerebro del programador, pero, como señalé anteriormente, esto no se aplica a la salida del compilador, ya que no hay ningún humano involucrado en ese punto. El otro significado es sobre el código que es compacto, por lo que tiene un menor costo de almacenamiento. Esto puede tener un impacto en la velocidad de ejecución, porque la RAM es lenta y, por lo tanto, realmente desea que los bucles más internos de su código encajen en la memoria caché de nivel 1 de la CPU. El tamaño de las funciones producidas por el compilador se puede obtener con algunas herramientas de desarrollador; en sistemas que usan binutils de GNU, puede usar el comando size
para obtener el código total y los tamaños de datos en un archivo de objeto (un compilado .o
) y objdump
para obtener más información. En particular, objdump -x
dará el tamaño de cada función individual.
"Rápido" es algo que debe medirse. Si desea saber si su código es rápido o no, haga una evaluación comparativa. Si el código resulta demasiado lento para su problema (esto no ocurre con frecuencia) y tiene alguna razón teórica convincente para creer que el hardware podría funcionar mucho mejor (por ejemplo, porque calculó el número de personas involucradas) operaciones, profundizar en los manuales de CPU y dominar todos los problemas de ancho de banda de memoria y caché), y luego (y solo entonces) es hora de echar un vistazo a lo que el compilador hizo con su código. Salvo estas condiciones, la limpieza del código fuente es un problema mucho más importante.
Dicho todo esto, puede ser útil si tienes a priori nociones de lo que puede hacer un compilador. Esto requiere un poco de entrenamiento. Sugiero que eche un vistazo al clásico dragon book; pero, de lo contrario, tendrá que dedicar un tiempo a compilar un código de ejemplo y observar el resultado de ensamblaje. C++ no es el lenguaje más fácil para eso, es posible que desee comenzar con C. simple. Idealmente, una vez que sepa lo suficiente como para poder escribir su propio compilador, entonces sabrá lo que puede hacer un compilador, y puede adivinar lo que hacer en un código dado.
Quiero saber la respuesta a esto también, pero realmente no puedo ver cómo la respuesta puede ser otra cosa que "Espero que el compilador lo mencione en alguna parte". –
+1. sin embargo, no veo cómo se puede saber. además de desmontar, o conocer la fuente del compilador (y simularlo en la cabeza). – lijie