-
-
Notifications
You must be signed in to change notification settings - Fork 2
-
Para obtener el código ensamblador a partir de ficheros fuente:
gcc -S miprograma_parte1.c miprogram_parte2.c
-
Para obtener el código objeto a partir del código ensamblador de los anteriores programas miprograma_parte1.s y miporgrama_parte2.s:
gcc -c miprogram_parte1.s miprograma_parte2.s
- O equivalentemente:
as miprograma_parte1.s miprograma_parte2.s
-
Finalmente hay que linkar el código de ambos programas y generar uno solo:
gcc -o miprograma.x miprograma_parte1.o miprograma_parte2.o
- Alternativamente:
ld -o miprograma.x miprograma_parte1.o miprograma_parte2.o
Para ejecutar los tres pasos directamente:
gcc -o miprograma miprograma_parte1.c miprograma_parte2.cPara activar las optimizaciones en el compilador añadimos -O0 -O1 -O2 -O3
-
No optimizar
-
Optimizaciones básicas (equivale a -O)
-
Optimizaciones avanzadas (requieren más tiempo)
-
Optimizaciones arriesgadas (pueden relentizar el programa)
-
Cálculo directo: contar instrucciones, bucles...
-
Contadores Hardware: contadores internos, velocidad original, no todos los procesadores tienen, necesario recompilar kernel para acceder a ellos y no permite alterar el código original.
-
Instrumentar el código: Añadir instrucciones al código del programa para contar instrucciones (o lo que haga falta).
-
Simular el procesador: Complejo, lento, lee el código compilado y "ejecuta" el programa, permite saber si cambios en el procesador mejoran o empeoran la ejecución de un programa (multiplicador más lento pero que permite mas multiplicaciones en paralelo, mejora el tiempo de ejecución del programa?).
Pide información al SO (y procesador) e instrumenta el código
valgrind --tool=lackey ./miejecutable
Convert machine code (in binary) to assembly
objdump -d objecte.o
Here you'll find all things i've learnt from linux thus far, enjoy!