Foros del Web » Programación para mayores de 30 ;) » Programación General »

Duda con compilador

Estas en el tema de Duda con compilador en el foro de Programación General en Foros del Web. Hola a todos como quisiera saber como funciona a mitad del proceso de compilacion el compilador, puesto que para pasar el codigo de fuente a ...
  #1 (permalink)  
Antiguo 22/07/2014, 12:18
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 8 meses
Puntos: 0
Duda con compilador

Hola a todos como quisiera saber como funciona a mitad del proceso de compilacion el compilador, puesto que para pasar el codigo de fuente a lenguaje maquina, se supone que tendria que saber que procesador se esta usando para poder asi pasarlo a lenguaje maquina.

El compilador identifica la arquitectura del procesador?, o tambien identifica el tipo de tecnologia por ejemplo si es un procesador de intel o un AMD o un ARM o cualquier otro.
  #2 (permalink)  
Antiguo 23/07/2014, 00:45
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Duda con compilador

El compilador no identifica la arquitectura del procesador; es un programa que correrá sobre un procesador (o familia de procesadores) y un sistema operativo determinados. Simplemente, está diseñado para que su salida sea código ejecutable en el procesador correspondiente. Así, por ejemplo, el compilador GNU C/C++ tiene versiones para Windows 32 y 64 bits, y para Linux 32 y 64 bits, pero las versiones del compilador para Windows no se podrán ejecutar en Linux, y viceversa. Partiendo del mismo código fuente, se obtendrá una versión distinta del ejecutable para cada caso, y, como en el caso del propio compilador, los programas creados para Windows no correrán en Linux y viceversa, incluso dentro del mismo sistema operativo los programas para 32 bits puede que no corran en 64 bits.

Ahora bien, también es posible hacer que un compilador genere código para otro procesador totalmente distinto. El caso más típico es el de los microcontroladores: Tienes compiladores (que corren en Windows) y te generan el código para microcontroladores de la familia PIC, o para la familia Arduino, etc.

En cuanto a lo que ocurre a mitad del proceso de compilación... Bien, básicamente hay tres etapas:

La primera es el preprocesador. Este toma el código fuente de entrada, y en función de las directivas (instrucciones especiales) que se indiquen, efectúa la inclusión de archivos, sustitución de macros, compilación condicional, etc. La salida de este preprocesador es un archivo de código fuente temporal, que es el que va a ser realmente compilado.

El compilador en sí, toma el archivo de salida del preprocesador y produce el código objeto. Aún no es un archivo ejecutable, y suele tener extensión .obj ó .o. En este código objeto ya están indicadas las llamadas a funciones, tanto internas como de librerías precompiladas, pero falta añadir ese código.

El último paso es el enlazador (linker). Este toma el código objeto generado por el compilador y busca en ese código objeto y en las librerías precompiladas las funciones a las que se llama. Si todo ha ido bien, genera el ejecutable final.

Lógicamente, este proceso tiene sus variantes. Por ejemplo, algunos lenguajes no necesitan la parte de preprocesado. En otras ocasiones, la fase de preprocesado y de compilado se hacen de una sola vez. Otras veces, la salida del compilador es un archivo de código fuente en lenguaje ensamblador, y necesitas un ensamblador para obtener el ejecutable final. En otras ocasiones el compilador parte de un lenguaje de alto nivel y te genera código en otro lenguaje de alto nivel (los más típicos son de PASCAL a C y de FORTRAN a C). Como puedes ver, hay múltiples variantes.

Espero que esto te resuelva alguna de tus dudas.

Saludos,

Etiquetas: lenguaje, maquina, procesador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:32.