FdT: Recomendación FEDORA.
Alvaro Herrera
alvherre en dcc.uchile.cl
Jue Oct 14 23:07:10 CLST 2004
On Thu, Oct 14, 2004 at 08:14:18PM -0300, rodrigo ahumada wrote:
> alguien sabe cuales son los ajustes que puede hacer gcc a los programas
> para quede adaptado a la maquina, a partir de codigo en c?
Muchisimos. Te recomiendo partir mirando las paginas de GCC, donde se
describen las tecnicas de optimizacion. Aun hoy se siguen implementando
tecnicas nuevas para hacer mas eficientes los programas (por ejemplo
otras representaciones del "arbol de parsing" que permiten implementar
nuevas optimizaciones. Un ejemplo reciente es la inclusion de Tree-SSA
en gcc-3.4 o 3.5).
Si quieres un ejemplo practico, toma un programa sencillo y compilalo
con -Os, -O0, -O1, -O2, y sin ningun -O. Y compara las diferencias del
assembler generado (o mide el tiempo de ejecucion, compara los profiles
que entrega algo como gprof, etc).
> lo digo porque a c lo veo muy estricto, y se pueden hacer muchos
> trucos que no creo que el compilador pueda seguir, si uno fuera a
> compilar los programas en el destino y hacer ahi los ajustes, no
> convendria mejor escribir los programas en un lenguaje mas general (o
> funcional)?
Eso es muy relativo. Otros lenguajes permiten mas optimizaciones, al
tiempo que otras caracteristicas los hacen mas lentos. Me han contado
que Java, por ejemplo, permite hacer mas cosas tanto al compilador en
tiempo de compilacion como a la maquina virtual, en tiempo de ejecucion;
en teoria un programa podria correr mas rapido (de hecho, ejemplos
idiotas como un calculo de Fibonacci es mas rapido en Java que en C).
En la practica, con toda la jerarquia de clases que tienes bajo la
aplicacion, se hace mas lento. Pero a la vez el lenguaje otorga nuevas
funcionalidades, como manejo automatico de memoria, herencia,
polimorfismo. Etc.
--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"¿Qué importan los años? Lo que realmente importa es comprobar que
a fin de cuentas la mejor edad de la vida es estar vivo" (Mafalda)
Más información sobre la lista de distribución Linux